| Index: native_client_sdk/src/build_tools/tests/test_update_nacl_manifest.py
|
| diff --git a/native_client_sdk/src/build_tools/tests/test_update_nacl_manifest.py b/native_client_sdk/src/build_tools/tests/test_update_nacl_manifest.py
|
| deleted file mode 100755
|
| index 53f0e7b6c385e51dfe5b35d874263592ab658e65..0000000000000000000000000000000000000000
|
| --- a/native_client_sdk/src/build_tools/tests/test_update_nacl_manifest.py
|
| +++ /dev/null
|
| @@ -1,641 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import copy
|
| -import datetime
|
| -import hashlib
|
| -import os
|
| -import posixpath
|
| -import subprocess
|
| -import sys
|
| -import tempfile
|
| -import unittest
|
| -import urlparse
|
| -
|
| -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
| -BUILD_TOOLS_DIR = os.path.dirname(SCRIPT_DIR)
|
| -
|
| -sys.path.append(BUILD_TOOLS_DIR)
|
| -import manifest_util
|
| -import update_nacl_manifest
|
| -from update_nacl_manifest import CANARY_BUNDLE_NAME
|
| -
|
| -
|
| -HTTPS_BASE_URL = 'https://commondatastorage.googleapis.com' \
|
| - '/nativeclient_mirror/nacl/nacl_sdk/'
|
| -
|
| -OS_CR = ('cros',)
|
| -OS_M = ('mac',)
|
| -OS_ML = ('mac', 'linux')
|
| -OS_MW = ('mac', 'win')
|
| -OS_MLW = ('mac', 'linux', 'win')
|
| -POST_STABLE = 'post_stable'
|
| -STABLE = 'stable'
|
| -BETA = 'beta'
|
| -DEV = 'dev'
|
| -CANARY = 'canary'
|
| -
|
| -
|
| -def GetArchiveUrl(host_os, version):
|
| - basename = 'naclsdk_%s.tar.bz2' % (host_os,)
|
| - return urlparse.urljoin(HTTPS_BASE_URL, posixpath.join(version, basename))
|
| -
|
| -
|
| -def MakeGsUrl(rel_path):
|
| - return update_nacl_manifest.GS_BUCKET_PATH + rel_path
|
| -
|
| -
|
| -def GetPathFromGsUrl(url):
|
| - assert url.startswith(update_nacl_manifest.GS_BUCKET_PATH)
|
| - return url[len(update_nacl_manifest.GS_BUCKET_PATH):]
|
| -
|
| -
|
| -def GetPathFromHttpsUrl(url):
|
| - assert url.startswith(HTTPS_BASE_URL)
|
| - return url[len(HTTPS_BASE_URL):]
|
| -
|
| -
|
| -def MakeArchive(host_os, version):
|
| - archive = manifest_util.Archive(host_os)
|
| - archive.url = GetArchiveUrl(host_os, version)
|
| - # dummy values that won't succeed if we ever use them, but will pass
|
| - # validation. :)
|
| - archive.checksum = {'sha1': 'foobar'}
|
| - archive.size = 1
|
| - return archive
|
| -
|
| -
|
| -def MakeNonPepperBundle(name, with_archives=False):
|
| - bundle = manifest_util.Bundle(name)
|
| - bundle.version = 1
|
| - bundle.revision = 1
|
| - bundle.description = 'Dummy bundle'
|
| - bundle.recommended = 'yes'
|
| - bundle.stability = 'stable'
|
| -
|
| - if with_archives:
|
| - for host_os in OS_MLW:
|
| - archive = manifest_util.Archive(host_os)
|
| - archive.url = 'http://example.com'
|
| - archive.checksum = {'sha1': 'blah'}
|
| - archive.size = 2
|
| - bundle.AddArchive(archive)
|
| - return bundle
|
| -
|
| -
|
| -def MakeBundle(major_version, revision=0, version=None, host_oses=None,
|
| - stability='dev'):
|
| - assert (version is None or
|
| - version.split('.')[0] == 'trunk' or
|
| - version.split('.')[0] == str(major_version))
|
| - if stability == CANARY:
|
| - bundle_name = CANARY_BUNDLE_NAME
|
| - else:
|
| - bundle_name = 'pepper_' + str(major_version)
|
| -
|
| - bundle = manifest_util.Bundle(bundle_name)
|
| - bundle.version = major_version
|
| - bundle.revision = revision
|
| - bundle.description = 'Chrome %s bundle, revision %s' % (major_version,
|
| - revision)
|
| - bundle.repath = 'pepper_' + str(major_version)
|
| - bundle.recommended = 'no'
|
| - bundle.stability = stability
|
| -
|
| - if host_oses:
|
| - for host_os in host_oses:
|
| - bundle.AddArchive(MakeArchive(host_os, version))
|
| - return bundle
|
| -
|
| -
|
| -class MakeManifest(manifest_util.SDKManifest):
|
| - def __init__(self, *args):
|
| - manifest_util.SDKManifest.__init__(self)
|
| -
|
| - for bundle in args:
|
| - self.AddBundle(bundle)
|
| -
|
| - def AddBundle(self, bundle):
|
| - self.MergeBundle(bundle, allow_existing=False)
|
| -
|
| -
|
| -class MakeHistory(object):
|
| - def __init__(self):
|
| - # used for a dummy timestamp
|
| - self.datetime = datetime.datetime.utcnow()
|
| - self.history = []
|
| -
|
| - def Add(self, host_oses, channel, version):
|
| - for host_os in host_oses:
|
| - timestamp = self.datetime.strftime('%Y-%m-%d %H:%M:%S.%f')
|
| - self.history.append((host_os, channel, version, timestamp))
|
| - self.datetime += datetime.timedelta(0, -3600) # one hour earlier
|
| - self.datetime += datetime.timedelta(-1) # one day earlier
|
| -
|
| -
|
| -class MakeFiles(dict):
|
| - def AddOnlineManifest(self, manifest_string):
|
| - self['naclsdk_manifest2.json'] = manifest_string
|
| -
|
| - def Add(self, bundle, add_archive_for_os=OS_MLW, add_json_for_os=OS_MLW):
|
| - for archive in bundle.GetArchives():
|
| - if not archive.host_os in add_archive_for_os:
|
| - continue
|
| -
|
| - # add a dummy file for each archive
|
| - path = GetPathFromHttpsUrl(archive.url)
|
| - self[path] = 'My Dummy Archive'
|
| -
|
| - if archive.host_os in add_json_for_os:
|
| - # add .json manifest snippet, it should look like a normal Bundle, but
|
| - # only has one archive.
|
| - new_bundle = manifest_util.Bundle('')
|
| - new_bundle.CopyFrom(bundle)
|
| - del new_bundle.archives[:]
|
| - new_bundle.AddArchive(archive)
|
| - self[path + '.json'] = new_bundle.GetDataAsString()
|
| -
|
| -
|
| -class TestDelegate(update_nacl_manifest.Delegate):
|
| - def __init__(self, manifest, history, files, version_mapping):
|
| - self.manifest = manifest
|
| - self.history = history
|
| - self.files = files
|
| - self.version_mapping = version_mapping
|
| - self.dryrun = 0
|
| - self.called_gsutil_cp = False
|
| -
|
| - def GetRepoManifest(self):
|
| - return self.manifest
|
| -
|
| - def GetHistory(self):
|
| - return self.history
|
| -
|
| - def GetTrunkRevision(self, version):
|
| - return self.version_mapping[version]
|
| -
|
| - def GsUtil_ls(self, url):
|
| - path = GetPathFromGsUrl(url)
|
| - result = []
|
| - for filename, _ in self.files.iteritems():
|
| - if filename.startswith(path):
|
| - result.append(MakeGsUrl(filename))
|
| - return result
|
| -
|
| - def GsUtil_cat(self, url):
|
| - path = GetPathFromGsUrl(url)
|
| - if path not in self.files:
|
| - raise subprocess.CalledProcessError(1, 'gsutil cat %s' % (url,))
|
| - return self.files[path]
|
| -
|
| - def GsUtil_cp(self, src, dest, stdin=None):
|
| - self.called_gsutil_cp = True
|
| - dest_path = GetPathFromGsUrl(dest)
|
| - if src == '-':
|
| - self.files[dest_path] = stdin
|
| - else:
|
| - src_path = GetPathFromGsUrl(src)
|
| - if src_path not in self.files:
|
| - raise subprocess.CalledProcessError(1, 'gsutil cp %s %s' % (src, dest))
|
| - self.files[dest_path] = self.files[src_path]
|
| -
|
| - def Print(self, *args):
|
| - # eat all informational messages
|
| - pass
|
| -
|
| -
|
| -# Shorthand for premade bundles/versions
|
| -V18_0_1025_163 = '18.0.1025.163'
|
| -V18_0_1025_175 = '18.0.1025.175'
|
| -V18_0_1025_184 = '18.0.1025.184'
|
| -V19_0_1084_41 = '19.0.1084.41'
|
| -V19_0_1084_67 = '19.0.1084.67'
|
| -V21_0_1145_0 = '21.0.1145.0'
|
| -V21_0_1166_0 = '21.0.1166.0'
|
| -VTRUNK_138079 = 'trunk.138079'
|
| -B18_0_1025_163_R1_MLW = MakeBundle(18, 1, V18_0_1025_163, OS_MLW)
|
| -B18_0_1025_184_R1_MLW = MakeBundle(18, 1, V18_0_1025_184, OS_MLW)
|
| -B18_R1_NONE = MakeBundle(18)
|
| -B19_0_1084_41_R1_MLW = MakeBundle(19, 1, V19_0_1084_41, OS_MLW)
|
| -B19_0_1084_67_R1_MLW = MakeBundle(19, 1, V19_0_1084_67, OS_MLW)
|
| -B19_R1_NONE = MakeBundle(19)
|
| -BCANARY_R1_NONE = MakeBundle(0, stability=CANARY)
|
| -B21_0_1145_0_R1_MLW = MakeBundle(21, 1, V21_0_1145_0, OS_MLW)
|
| -B21_0_1166_0_R1_MW = MakeBundle(21, 1, V21_0_1166_0, OS_MW)
|
| -BTRUNK_138079_R1_MLW = MakeBundle(21, 1, VTRUNK_138079, OS_MLW)
|
| -NON_PEPPER_BUNDLE_NOARCHIVES = MakeNonPepperBundle('foo')
|
| -NON_PEPPER_BUNDLE_ARCHIVES = MakeNonPepperBundle('bar', with_archives=True)
|
| -
|
| -
|
| -class TestUpdateManifest(unittest.TestCase):
|
| - def setUp(self):
|
| - self.history = MakeHistory()
|
| - self.files = MakeFiles()
|
| - self.version_mapping = {}
|
| - self.delegate = None
|
| - self.uploaded_manifest = None
|
| - self.manifest = None
|
| -
|
| - def _MakeDelegate(self):
|
| - self.delegate = TestDelegate(self.manifest, self.history.history,
|
| - self.files, self.version_mapping)
|
| -
|
| - def _Run(self, host_oses, fixed_bundle_versions=None):
|
| - update_nacl_manifest.Run(self.delegate, host_oses, fixed_bundle_versions)
|
| -
|
| - def _HasUploadedManifest(self):
|
| - return 'naclsdk_manifest2.json' in self.files
|
| -
|
| - def _ReadUploadedManifest(self):
|
| - self.uploaded_manifest = manifest_util.SDKManifest()
|
| - self.uploaded_manifest.LoadDataFromString(
|
| - self.files['naclsdk_manifest2.json'])
|
| -
|
| - def _AssertUploadedManifestHasBundle(self, bundle, stability):
|
| - if stability == CANARY:
|
| - bundle_name = CANARY_BUNDLE_NAME
|
| - else:
|
| - bundle_name = bundle.name
|
| -
|
| - uploaded_manifest_bundle = self.uploaded_manifest.GetBundle(bundle_name)
|
| - # Bundles that we create in the test (and in the manifest snippets) have
|
| - # their stability set to "dev". update_nacl_manifest correctly updates it.
|
| - # So we have to force the stability of |bundle| so they compare equal.
|
| - test_bundle = copy.copy(bundle)
|
| - test_bundle.stability = stability
|
| - if stability == CANARY:
|
| - test_bundle.name = CANARY_BUNDLE_NAME
|
| - self.assertEqual(uploaded_manifest_bundle, test_bundle)
|
| -
|
| - def _AddCsvHistory(self, history):
|
| - import csv
|
| - import cStringIO
|
| - history_stream = cStringIO.StringIO(history)
|
| - self.history.history = [(platform, channel, version, date)
|
| - for platform, channel, version, date in csv.reader(history_stream)]
|
| -
|
| - def testNoUpdateNeeded(self):
|
| - self.manifest = MakeManifest(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self.assertFalse(self._HasUploadedManifest())
|
| -
|
| - # Add another bundle, make sure it still doesn't update
|
| - self.manifest.AddBundle(B19_0_1084_41_R1_MLW)
|
| - self._Run(OS_MLW)
|
| - self.assertFalse(self._HasUploadedManifest())
|
| -
|
| - def testSimpleUpdate(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_163_R1_MLW, BETA)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| -
|
| - def testOnePlatformHasNewerRelease(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_M, BETA, V18_0_1025_175) # Mac has newer version
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_163_R1_MLW, BETA)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| -
|
| - def testMultipleMissingPlatformsInHistory(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_ML, BETA, V18_0_1025_184)
|
| - self.history.Add(OS_M, BETA, V18_0_1025_175)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_163_R1_MLW, BETA)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| -
|
| - def testUpdateOnlyOneBundle(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE, B19_0_1084_41_R1_MLW)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_163_R1_MLW, BETA)
|
| - self._AssertUploadedManifestHasBundle(B19_0_1084_41_R1_MLW, DEV)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 2)
|
| -
|
| - def testUpdateTwoBundles(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE, B19_R1_NONE)
|
| - self.history.Add(OS_MLW, DEV, V19_0_1084_41)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self.files.Add(B19_0_1084_41_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_163_R1_MLW, BETA)
|
| - self._AssertUploadedManifestHasBundle(B19_0_1084_41_R1_MLW, DEV)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 2)
|
| -
|
| - def testUpdateWithMissingPlatformsInArchives(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_184)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_184_R1_MLW, add_archive_for_os=OS_M)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_163_R1_MLW, BETA)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| -
|
| - def testUpdateWithMissingManifestSnippets(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_184)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_184_R1_MLW, add_json_for_os=OS_ML)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_163_R1_MLW, BETA)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| -
|
| - def testRecommendedIsStable(self):
|
| - for channel in STABLE, BETA, DEV, CANARY:
|
| - self.setUp()
|
| - bundle = copy.deepcopy(B18_R1_NONE)
|
| - self.manifest = MakeManifest(bundle)
|
| - self.history.Add(OS_MLW, channel, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| - uploaded_bundle = self.uploaded_manifest.GetBundle('pepper_18')
|
| - if channel == STABLE:
|
| - self.assertEqual(uploaded_bundle.recommended, 'yes')
|
| - else:
|
| - self.assertEqual(uploaded_bundle.recommended, 'no')
|
| -
|
| - def testNoUpdateWithNonPepperBundle(self):
|
| - self.manifest = MakeManifest(NON_PEPPER_BUNDLE_NOARCHIVES,
|
| - B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self.assertFalse(self._HasUploadedManifest())
|
| -
|
| - def testUpdateWithHistoryWithExtraneousPlatforms(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_ML, BETA, V18_0_1025_184)
|
| - self.history.Add(OS_CR, BETA, V18_0_1025_184)
|
| - self.history.Add(OS_CR, BETA, V18_0_1025_175)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_163_R1_MLW, BETA)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| -
|
| - def testSnippetWithStringRevisionAndVersion(self):
|
| - # This test exists because some manifest snippets were uploaded with
|
| - # strings for their revisions and versions. I want to make sure the
|
| - # resulting manifest is still consistent with the old format.
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - bundle_string_revision = MakeBundle('18', '1234', V18_0_1025_163, OS_MLW)
|
| - self.files.Add(bundle_string_revision)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - uploaded_bundle = self.uploaded_manifest.GetBundle(
|
| - bundle_string_revision.name)
|
| - self.assertEqual(uploaded_bundle.revision, 1234)
|
| - self.assertEqual(uploaded_bundle.version, 18)
|
| -
|
| - def testUpdateCanary(self):
|
| - # Note that the bundle in naclsdk_manifest2.json will be called
|
| - # CANARY_BUNDLE_NAME, whereas the bundle in the manifest "snippet" will be
|
| - # called "pepper_21".
|
| - canary_bundle = copy.deepcopy(BCANARY_R1_NONE)
|
| - self.manifest = MakeManifest(canary_bundle)
|
| - self.history.Add(OS_MW, CANARY, V21_0_1145_0)
|
| - self.files.Add(B21_0_1145_0_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B21_0_1145_0_R1_MLW, CANARY)
|
| -
|
| - def testUpdateCanaryUseTrunkArchives(self):
|
| - canary_bundle = copy.deepcopy(BCANARY_R1_NONE)
|
| - self.manifest = MakeManifest(canary_bundle)
|
| - self.history.Add(OS_MW, CANARY, V21_0_1166_0)
|
| - self.files.Add(B21_0_1166_0_R1_MW)
|
| - self.files.Add(BTRUNK_138079_R1_MLW)
|
| - self.version_mapping[V21_0_1166_0] = VTRUNK_138079
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| -
|
| - test_bundle = copy.deepcopy(B21_0_1166_0_R1_MW)
|
| - test_bundle.AddArchive(BTRUNK_138079_R1_MLW.GetArchive('linux'))
|
| - self._AssertUploadedManifestHasBundle(test_bundle, CANARY)
|
| -
|
| - def testCanaryUseOnlyTrunkArchives(self):
|
| - self.manifest = MakeManifest(copy.deepcopy(BCANARY_R1_NONE))
|
| - history = """win,canary,21.0.1163.0,2012-06-04 12:35:44.784446
|
| -mac,canary,21.0.1163.0,2012-06-04 11:54:09.433166"""
|
| - self._AddCsvHistory(history)
|
| - self.version_mapping['21.0.1163.0'] = 'trunk.140240'
|
| - my_bundle = MakeBundle(21, 140240, '21.0.1163.0', OS_MLW)
|
| - self.files.Add(my_bundle)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(my_bundle, CANARY)
|
| -
|
| - def testCanaryShouldOnlyUseCanaryVersions(self):
|
| - canary_bundle = copy.deepcopy(BCANARY_R1_NONE)
|
| - self.manifest = MakeManifest(canary_bundle)
|
| - self.history.Add(OS_MW, CANARY, V21_0_1166_0)
|
| - self.history.Add(OS_MW, BETA, V19_0_1084_41)
|
| - self.files.Add(B19_0_1084_41_R1_MLW)
|
| - self.version_mapping[V21_0_1166_0] = VTRUNK_138079
|
| - self._MakeDelegate()
|
| - self.assertRaises(Exception, self._Run, OS_MLW)
|
| -
|
| - def testMissingCanaryFollowedByStableShouldWork(self):
|
| - history = """win,canary,21.0.1160.0,2012-06-01 19:44:35.936109
|
| -mac,canary,21.0.1160.0,2012-06-01 18:20:02.003123
|
| -mac,stable,19.0.1084.52,2012-06-01 17:59:21.559710
|
| -win,canary,21.0.1159.2,2012-06-01 02:31:43.877688
|
| -mac,stable,19.0.1084.53,2012-06-01 01:39:57.549149
|
| -win,canary,21.0.1158.0,2012-05-31 20:16:55.615236
|
| -win,canary,21.0.1157.0,2012-05-31 17:41:29.516013
|
| -mac,canary,21.0.1158.0,2012-05-31 17:41:27.591354
|
| -mac,beta,20.0.1132.21,2012-05-30 23:45:38.535586
|
| -linux,beta,20.0.1132.21,2012-05-30 23:45:37.025015
|
| -cf,beta,20.0.1132.21,2012-05-30 23:45:36.767529
|
| -win,beta,20.0.1132.21,2012-05-30 23:44:56.675123
|
| -win,canary,21.0.1156.1,2012-05-30 22:28:01.872056
|
| -mac,canary,21.0.1156.1,2012-05-30 21:20:29.920390
|
| -win,canary,21.0.1156.0,2012-05-30 12:46:48.046627
|
| -mac,canary,21.0.1156.0,2012-05-30 12:14:21.305090"""
|
| - self.manifest = MakeManifest(copy.deepcopy(BCANARY_R1_NONE))
|
| - self._AddCsvHistory(history)
|
| - self.version_mapping = {
|
| - '21.0.1160.0': 'trunk.139984',
|
| - '21.0.1159.2': 'trunk.139890',
|
| - '21.0.1158.0': 'trunk.139740',
|
| - '21.0.1157.0': 'unknown',
|
| - '21.0.1156.1': 'trunk.139576',
|
| - '21.0.1156.0': 'trunk.139984'}
|
| - self.files.Add(MakeBundle(21, 139890, '21.0.1159.2', OS_MLW))
|
| - self.files.Add(MakeBundle(21, 0, '21.0.1157.1', ('linux', 'win')))
|
| - my_bundle = MakeBundle(21, 139576, '21.0.1156.1', OS_MLW)
|
| - self.files.Add(my_bundle)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(my_bundle, CANARY)
|
| -
|
| - def testExtensionWorksAsBz2(self):
|
| - # Allow old bundles with just .bz2 extension to work
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - bundle = copy.deepcopy(B18_0_1025_163_R1_MLW)
|
| - archive_url = bundle.GetArchive('mac').url
|
| - bundle.GetArchive('mac').url = archive_url.replace('.tar', '')
|
| - self.files.Add(bundle)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(bundle, BETA)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| -
|
| - def testOnlyOneStableBundle(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE, B19_R1_NONE)
|
| - self.history.Add(OS_MLW, STABLE, V18_0_1025_163)
|
| - self.history.Add(OS_MLW, STABLE, V19_0_1084_41)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self.files.Add(B19_0_1084_41_R1_MLW)
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self._ReadUploadedManifest()
|
| - p18_bundle = self.uploaded_manifest.GetBundle(B18_R1_NONE.name)
|
| - self.assertEqual(p18_bundle.stability, POST_STABLE)
|
| - p19_bundle = self.uploaded_manifest.GetBundle(B19_R1_NONE.name)
|
| - self.assertEqual(p19_bundle.stability, STABLE)
|
| -
|
| - def testDontPushIfNoChange(self):
|
| - # Make an online manifest that already has this bundle.
|
| - online_manifest = MakeManifest(B18_0_1025_163_R1_MLW)
|
| - self.files.AddOnlineManifest(online_manifest.GetDataAsString())
|
| -
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, DEV, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| -
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self.assertFalse(self.delegate.called_gsutil_cp)
|
| -
|
| - def testDontPushIfRollback(self):
|
| - # Make an online manifest that has a newer bundle
|
| - online_manifest = MakeManifest(B18_0_1025_184_R1_MLW)
|
| - self.files.AddOnlineManifest(online_manifest.GetDataAsString())
|
| -
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, DEV, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| -
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW)
|
| - self.assertFalse(self.delegate.called_gsutil_cp)
|
| -
|
| - def testRunWithFixedBundleVersions(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| - self.files.Add(B18_0_1025_184_R1_MLW)
|
| -
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW, [('pepper_18', '18.0.1025.184')])
|
| - self._ReadUploadedManifest()
|
| - self._AssertUploadedManifestHasBundle(B18_0_1025_184_R1_MLW, BETA)
|
| - self.assertEqual(len(self.uploaded_manifest.GetBundles()), 1)
|
| -
|
| - def testRunWithMissingFixedBundleVersions(self):
|
| - self.manifest = MakeManifest(B18_R1_NONE)
|
| - self.history.Add(OS_MLW, BETA, V18_0_1025_163)
|
| - self.files.Add(B18_0_1025_163_R1_MLW)
|
| -
|
| - self._MakeDelegate()
|
| - self._Run(OS_MLW, [('pepper_18', '18.0.1025.184')])
|
| - # Nothing should be uploaded if the user gives a missing fixed version.
|
| - self.assertFalse(self.delegate.called_gsutil_cp)
|
| -
|
| -
|
| -class TestUpdateVitals(unittest.TestCase):
|
| - def setUp(self):
|
| - f = tempfile.NamedTemporaryFile('w', prefix="test_update_nacl_manifest")
|
| - self.test_file = f.name
|
| - f.close()
|
| - test_data = "Some test data"
|
| - self.sha1 = hashlib.sha1(test_data).hexdigest()
|
| - self.data_len = len(test_data)
|
| - with open(self.test_file, 'w') as f:
|
| - f.write(test_data)
|
| -
|
| - def tearDown(self):
|
| - os.remove(self.test_file)
|
| -
|
| - def testUpdateVitals(self):
|
| - archive = manifest_util.Archive(manifest_util.GetHostOS())
|
| - path = os.path.abspath(self.test_file)
|
| - if sys.platform == 'win32':
|
| - # On Windows, the path must start with three slashes, i.e.
|
| - # (file:///C:\whatever)
|
| - path = '/' + path
|
| - archive.url = 'file://' + path
|
| -
|
| - bundle = MakeBundle(18)
|
| - bundle.AddArchive(archive)
|
| - manifest = MakeManifest(bundle)
|
| - archive = manifest.GetBundles()[0]['archives'][0]
|
| -
|
| - self.assertTrue('size' not in archive)
|
| - self.assertTrue('checksum' not in archive)
|
| - self.assertRaises(manifest_util.Error, manifest.Validate)
|
| -
|
| - manifest.Validate(add_missing_info=True)
|
| -
|
| - self.assertEqual(archive['size'], self.data_len)
|
| - self.assertEqual(archive['checksum']['sha1'], self.sha1)
|
| -
|
| -
|
| -class TestRealDelegate(unittest.TestCase):
|
| - def setUp(self):
|
| - self.delegate = update_nacl_manifest.RealDelegate()
|
| -
|
| - def testGetTrunkRevision(self):
|
| - revision_dict = {
|
| - '21.0.1180.80': '151582',
|
| - '23.0.1271.89': '167132',
|
| - '24.0.1305.4': '164971',
|
| - }
|
| - for version, revision in revision_dict.iteritems():
|
| - self.assertEqual('trunk.%s' % revision,
|
| - self.delegate.GetTrunkRevision(version))
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(unittest.main())
|
|
|