Merge lp:~sinzui/juju-ci-tools/juju-core2 into lp:juju-ci-tools

Proposed by Curtis Hovey
Status: Work in progress
Proposed branch: lp:~sinzui/juju-ci-tools/juju-core2
Merge into: lp:juju-ci-tools
Diff against target: 467 lines (+69/-177)
10 files modified
README.md (+1/-1)
build_vagrant_boxes.py (+5/-11)
candidate.py (+6/-4)
jujuci.py (+10/-29)
make-buildvars (+1/-1)
retrieve-ubuntu-packages.bash (+0/-86)
s3ci.py (+1/-1)
tests/test_candidate.py (+21/-2)
tests/test_jujuci.py (+8/-37)
tests/test_s3ci.py (+16/-5)
To merge this branch: bzr merge lp:~sinzui/juju-ci-tools/juju-core2
Reviewer Review Type Date Requested Status
Juju Release Engineering Pending
Review via email: mp+309757@code.launchpad.net

Description of the change

support juju-core and juju-2.0 binary package names.

This branch was started many months ago. It does not work since scripts and the packaging changed

To post a comment you must log in.

Unmerged revisions

1293. By Curtis Hovey

Merged trunk

1292. By Curtis Hovey

Merged trunk

1291. By Curtis Hovey

Remove ambiguous uses og juju-core.

1290. By Curtis Hovey

Update s3ci to get juju2 package name.

1289. By Curtis Hovey

Removed unused certify scripts. Determine deb package name based on Juju version.

1288. By Curtis Hovey

Merged trunk.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'README.md'
--- README.md 2016-06-02 21:48:54 +0000
+++ README.md 2016-11-01 14:01:39 +0000
@@ -14,7 +14,7 @@
14making a tree of tools and metadata, and lastly publishing the tools.14making a tree of tools and metadata, and lastly publishing the tools.
15you can skip the tarball and package steps if you just want to publish15you can skip the tarball and package steps if you just want to publish
16the juju tools (AKA jujud, servers, agents). If you want to test a fix16the juju tools (AKA jujud, servers, agents). If you want to test a fix
17that is in the juju-core trunk branch, you can make your own release17that is in the juju master branch, you can make your own release
18tarball and package.18tarball and package.
1919
20Once juju is published to the test clouds, individual tests can be performed.20Once juju is published to the test clouds, individual tests can be performed.
2121
=== modified file 'build_vagrant_boxes.py'
--- build_vagrant_boxes.py 2016-02-19 06:41:06 +0000
+++ build_vagrant_boxes.py 2016-11-01 14:01:39 +0000
@@ -23,8 +23,7 @@
23"""23"""
2424
25SERIES_TO_NUMBERS = {25SERIES_TO_NUMBERS = {
26 'trusty': '14.04',26 'xenial': '16.04',
27 'precise': '12.04',
28}27}
29JENKINS_KVM = 'JENKINS_KVM'28JENKINS_KVM = 'JENKINS_KVM'
30WORKSPACE = 'WORKSPACE'29WORKSPACE = 'WORKSPACE'
@@ -33,8 +32,7 @@
33def get_package_globs(series, arch):32def get_package_globs(series, arch):
34 series_number = SERIES_TO_NUMBERS[series]33 series_number = SERIES_TO_NUMBERS[series]
35 return {34 return {
36 'core': 'juju-core_*%s*_%s.deb' % (series_number, arch),35 'juju2': 'juju2_*%s*_%s.deb' % (series_number, arch),
37 'local': 'juju-local_*%s*_all.deb' % series_number,
38 }36 }
3937
4038
@@ -78,8 +76,7 @@
78 env = os.environ.copy()76 env = os.environ.copy()
79 env['BUILD_FOR'] = '%s:%s' % (series, arch)77 env['BUILD_FOR'] = '%s:%s' % (series, arch)
80 if package_info is not None:78 if package_info is not None:
81 env['JUJU_CORE_PKG'] = package_info['core']79 env['JUJU_CORE_PKG'] = package_info['juju2']
82 env['JUJU_LOCAL_PKG'] = package_info['local']
83 builder_path = os.path.join(jenkins_kvm, 'build-juju-local.sh')80 builder_path = os.path.join(jenkins_kvm, 'build-juju-local.sh')
84 build_dir = '%s-%s' % (series, arch)81 build_dir = '%s-%s' % (series, arch)
85 logging.info('Building Vagrant box for %s %s' % (series, arch))82 logging.info('Building Vagrant box for %s %s' % (series, arch))
@@ -140,11 +137,8 @@
140 package_info = get_debian_packages(137 package_info = get_debian_packages(
141 credentials, args.workspace, args.series, args.arch,138 credentials, args.workspace, args.series, args.arch,
142 args.use_ci_juju_packages)139 args.use_ci_juju_packages)
143 if 'core' not in package_info:140 if 'juju2' not in package_info:
144 logging.error('Could not find juju-core package')141 logging.error('Could not find juju2 package')
145 sys.exit(1)
146 if 'local' not in package_info:
147 logging.error('Could not find juju-local package')
148 sys.exit(1)142 sys.exit(1)
149 else:143 else:
150 package_info = None144 package_info = None
151145
=== modified file 'candidate.py'
--- candidate.py 2016-08-04 16:38:06 +0000
+++ candidate.py 2016-11-01 14:01:39 +0000
@@ -19,6 +19,7 @@
19 get_artifacts,19 get_artifacts,
20 get_credentials,20 get_credentials,
21 JENKINS_URL,21 JENKINS_URL,
22 PackageNamer,
22 PUBLISH_REVISION23 PUBLISH_REVISION
23)24)
24from utility import (25from utility import (
@@ -80,7 +81,7 @@
80 if not pr_number:81 if not pr_number:
81 pr_number = find_publish_revision_number(credentials, br_number)82 pr_number = find_publish_revision_number(credentials, br_number)
82 get_artifacts(83 get_artifacts(
83 credentials, PUBLISH_REVISION, pr_number, 'juju-core*', candidate_dir,84 credentials, PUBLISH_REVISION, pr_number, 'juju*deb', candidate_dir,
84 dry_run=dry_run, verbose=verbose)85 dry_run=dry_run, verbose=verbose)
8586
8687
@@ -95,11 +96,12 @@
9596
9697
97def get_package(artifacts_path, version):98def get_package(artifacts_path, version):
98 """Return the path to the expected juju-core package for the localhost."""99 """Return the path to the expected juju package for the localhost."""
99 release = subprocess.check_output(['lsb_release', '-sr']).strip()100 release = subprocess.check_output(['lsb_release', '-sr']).strip()
100 arch = get_deb_arch()101 arch = get_deb_arch()
101 package_name = 'juju-core_{}-0ubuntu1~{}.1~juju1_{}.deb'.format(102 deb_name = PackageNamer.get_juju_package_name(version)
102 version, release, arch)103 package_name = '{}_{}-0ubuntu1~{}.1~juju1_{}.deb'.format(
104 deb_name, version, release, arch)
103 package_path = os.path.join(artifacts_path, package_name)105 package_path = os.path.join(artifacts_path, package_name)
104 return package_path106 return package_path
105107
106108
=== modified file 'jujuci.py'
--- jujuci.py 2016-07-01 11:05:05 +0000
+++ jujuci.py 2016-11-01 14:01:39 +0000
@@ -40,7 +40,6 @@
40JENKINS_URL = 'http://juju-ci.vapour.ws:8080'40JENKINS_URL = 'http://juju-ci.vapour.ws:8080'
41BUILD_REVISION = 'build-revision'41BUILD_REVISION = 'build-revision'
42PUBLISH_REVISION = 'publish-revision'42PUBLISH_REVISION = 'publish-revision'
43CERTIFY_UBUNTU_PACKAGES = 'certify-ubuntu-packages'
4443
45Artifact = namedtuple('Artifact', ['file_name', 'location'])44Artifact = namedtuple('Artifact', ['file_name', 'location'])
4645
@@ -174,13 +173,6 @@
174 return get_juju_binary(credentials, file_name, build_data, workspace)173 return get_juju_binary(credentials, file_name, build_data, workspace)
175174
176175
177def get_certification_bin(credentials, version, workspace):
178 build_data = get_build_data(JENKINS_URL, credentials,
179 CERTIFY_UBUNTU_PACKAGES, 'lastBuild')
180 file_name = PackageNamer.factory().get_certification_package(version)
181 return get_juju_binary(credentials, file_name, build_data, workspace)
182
183
184def get_juju_binary(credentials, file_name, build_data, workspace):176def get_juju_binary(credentials, file_name, build_data, workspace):
185 artifact = get_filename_artifact(file_name, build_data)177 artifact = get_filename_artifact(file_name, build_data)
186 target_path = os.path.join(workspace, artifact.file_name)178 target_path = os.path.join(workspace, artifact.file_name)
@@ -340,15 +332,6 @@
340 parser_get_juju_bin.add_argument('workspace', nargs='?', default='.',332 parser_get_juju_bin.add_argument('workspace', nargs='?', default='.',
341 help='The place to store binaries.')333 help='The place to store binaries.')
342 add_credential_args(parser_get_juju_bin)334 add_credential_args(parser_get_juju_bin)
343 parser_get_certification_bin = subparsers.add_parser(
344 'get-certification-bin',
345 help='Retrieve and extract juju binaries for certification.')
346 parser_get_certification_bin.add_argument(
347 'version', help='The version to get certification for.')
348 parser_get_certification_bin.add_argument(
349 'workspace', nargs='?', default='.',
350 help='The place to store binaries.')
351 add_credential_args(parser_get_certification_bin)
352 parser_get_buildvars = subparsers.add_parser(335 parser_get_buildvars = subparsers.add_parser(
353 'get-build-vars',336 'get-build-vars',
354 help='Retrieve the build-vars for a build-revision.')337 help='Retrieve the build-vars for a build-revision.')
@@ -424,20 +407,22 @@
424class PackageNamer(Namer):407class PackageNamer(Namer):
425 """A class knows the names of packages."""408 """A class knows the names of packages."""
426409
410 @staticmethod
411 def get_juju_package_name(version):
412 """Return the name of the package based on the Juju version."""
413 if version.startswith('1.'):
414 return 'juju-core'
415 return 'juju2'
416
427 def get_release_package_suffix(self):417 def get_release_package_suffix(self):
428 return '-0ubuntu1~{distro_release}.1~juju1_{arch}.deb'.format(418 return '-0ubuntu1~{distro_release}.1~juju1_{arch}.deb'.format(
429 distro_release=self.distro_release, arch=self.arch)419 distro_release=self.distro_release, arch=self.arch)
430420
431 def get_release_package(self, version):421 def get_release_package(self, version):
432 return (422 return (
433 'juju-core_{version}{suffix}'423 '{deb_name}_{version}{suffix}').format(
434 ).format(version=version, suffix=self.get_release_package_suffix())424 deb_name=self.get_juju_package_name(version),
435425 version=version, suffix=self.get_release_package_suffix())
436 def get_certification_package(self, version):
437 return (
438 'juju-core_{version}~{distro_release}.1_{arch}.deb'
439 ).format(version=version, distro_release=self.distro_release,
440 arch=self.arch)
441426
442427
443class JobNamer(Namer):428class JobNamer(Namer):
@@ -471,10 +456,6 @@
471 dry_run=args.dry_run, verbose=args.verbose)456 dry_run=args.dry_run, verbose=args.verbose)
472 elif args.command == 'get-juju-bin':457 elif args.command == 'get-juju-bin':
473 print_now(get_juju_bin(credentials, args.workspace))458 print_now(get_juju_bin(credentials, args.workspace))
474 elif args.command == 'get-certification-bin':
475 path = get_certification_bin(credentials, args.version,
476 args.workspace)
477 print_now(path)
478 elif args.command == 'get-build-vars':459 elif args.command == 'get-build-vars':
479 text = get_buildvars(460 text = get_buildvars(
480 credentials, args.build, env=args.env,461 credentials, args.build, env=args.env,
481462
=== modified file 'make-buildvars'
--- make-buildvars 2016-02-18 20:53:26 +0000
+++ make-buildvars 2016-11-01 14:01:39 +0000
@@ -41,7 +41,7 @@
4141
4242
43def get_git_revision_info(branch, revision_spec):43def get_git_revision_info(branch, revision_spec):
44 """Find the commit and juju-core version of a branch.44 """Find the commit and juju version of a branch.
4545
46 Returns a tuple comparable to revno, revision-id, version.46 Returns a tuple comparable to revno, revision-id, version.
47 The revno is always None. The revision-id is the commit hash.47 The revno is always None. The revision-id is the commit hash.
4848
=== removed file 'retrieve-ubuntu-packages.bash'
--- retrieve-ubuntu-packages.bash 2015-04-06 20:11:19 +0000
+++ retrieve-ubuntu-packages.bash 1970-01-01 00:00:00 +0000
@@ -1,86 +0,0 @@
1#!/bin/bash
2# Download Ubuntu juju packages that match the version under test.
3set -eu
4
5: ${LOCAL_JENKINS_URL=http://juju-ci.vapour.ws:8080}
6ARTIFACTS_PATH=$WORKSPACE/artifacts
7
8: ${SCRIPTS=$(readlink -f $(dirname $0))}
9export PATH="$SCRIPTS:$PATH"
10
11UBUNTU_ARCH="http://archive.ubuntu.com/ubuntu/pool/universe/j/juju-core/"
12PORTS_ARCH="http://ports.ubuntu.com/pool/universe/j/juju-core/"
13ALL_ARCHIVES="$UBUNTU_ARCH $PORTS_ARCH"
14
15TRUSTY_AMD64="certify-trusty-amd64"
16TRUSTY_PPC64="certify-trusty-ppc64"
17TRUSTY_I386="certify-trusty-i386"
18
19set -x
20
21usage() {
22 echo "usage: $0 VERSION"
23 echo " VERSION: The juju package version to retrive."
24 exit 1
25}
26
27
28check_deps() {
29 echo "Phase 0: Checking requirements."
30 has_deps=1
31 which lftp || has_deps=0
32 if [[ $has_deps == 0 ]]; then
33 echo "Install lftp."
34 exit 2
35 fi
36}
37
38
39retrieve_packages() {
40 # Retrieve the $RELEASE packages that contain jujud,
41 # or copy a locally built package.
42 echo "Phase 1: Retrieving juju-core packages from archives"
43 cd $WORKSPACE
44 for archive in $ALL_ARCHIVES; do
45 safe_archive=$(echo "$archive" | sed -e 's,//.*@,//,')
46 echo "checking $safe_archive for $VERSION."
47 lftp -c mirror -I "juju*${VERSION}*.deb" $archive;
48 done
49 if [ -d $WORKSPACE/juju-core ]; then
50 found=$(find $WORKSPACE/juju-core/ -name "*deb")
51 if [[ $found != "" ]]; then
52 mv $WORKSPACE/juju-core/*deb ./
53 fi
54 rm -r $WORKSPACE/juju-core
55 fi
56}
57
58
59start_series_arch_tests() {
60 [[ -z $TOKEN ]] && return 0
61 encoded_version=$(echo "$VERSION" | sed 's,[+],%2B,')
62 query="token=$TOKEN&VERSION=$encoded_version"
63 for job in $TRUSTY_AMD64 $TRUSTY_PPC64 $TRUSTY_I386; do
64 curl -o /dev/null \
65 "$LOCAL_JENKINS_URL/job/$job/buildWithParameters?$query"
66 done
67}
68
69
70TOKEN=""
71while [[ "${1-}" != "" && $1 =~ ^-.* ]]; do
72 case $1 in
73 --start-other-tests)
74 shift
75 TOKEN=$1
76 ;;
77 esac
78 shift
79done
80
81test $# -eq 1 || usage
82VERSION=$1
83
84check_deps
85retrieve_packages
86start_series_arch_tests
870
=== modified file 's3ci.py'
--- s3ci.py 2016-02-19 06:41:06 +0000
+++ s3ci.py 2016-11-01 14:01:39 +0000
@@ -99,7 +99,7 @@
99 suffix = PackageNamer.factory().get_release_package_suffix()99 suffix = PackageNamer.factory().get_release_package_suffix()
100 filtered = [100 filtered = [
101 (k, f) for k, f in filter_keys(keys, suffix)101 (k, f) for k, f in filter_keys(keys, suffix)
102 if f.startswith('juju-core_')]102 if f.startswith('juju2_') or f.startswith('juju-core_')]
103 if len(filtered) == 0:103 if len(filtered) == 0:
104 raise PackageNotFound('Package could not be found.')104 raise PackageNotFound('Package could not be found.')
105 return sorted(filtered, key=lambda x: int(105 return sorted(filtered, key=lambda x: int(
106106
=== modified file 'tests/test_candidate.py'
--- tests/test_candidate.py 2016-08-04 16:38:06 +0000
+++ tests/test_candidate.py 2016-11-01 14:01:39 +0000
@@ -128,7 +128,7 @@
128 self.assertEqual(options, kwargs)128 self.assertEqual(options, kwargs)
129 output, args, kwargs = ga_mock.mock_calls[1]129 output, args, kwargs = ga_mock.mock_calls[1]
130 self.assertEqual(130 self.assertEqual(
131 (credentials, 'publish-revision', 5678, 'juju-core*',131 (credentials, 'publish-revision', 5678, 'juju*deb',
132 '~/candidate/1.24.4-artifacts'),132 '~/candidate/1.24.4-artifacts'),
133 args)133 args)
134 self.assertEqual(options, kwargs)134 self.assertEqual(options, kwargs)
@@ -159,7 +159,26 @@
159 self.assertEqual(159 self.assertEqual(
160 ['1.21-artifacts', 'master-artifacts'], sorted(dirs))160 ['1.21-artifacts', 'master-artifacts'], sorted(dirs))
161161
162 def test_get_package(self):162 def test_get_package_2x(self):
163 def subprocessor(*args, **kwargs):
164 command = args[0]
165 if 'lsb_release' in command:
166 return '14.04'
167 elif 'dpkg' in command:
168 return 'amd64'
169
170 with patch('subprocess.check_output',
171 side_effect=subprocessor) as co_mock:
172 name = get_package('foo', '2.2.3')
173 self.assertEqual(
174 'foo/juju2_2.2.3-0ubuntu1~14.04.1~juju1_amd64.deb', name)
175 self.assertEqual(2, co_mock.call_count)
176 output, args, kwargs = co_mock.mock_calls[0]
177 self.assertEqual((['lsb_release', '-sr'], ), args)
178 output, args, kwargs = co_mock.mock_calls[1]
179 self.assertEqual((['dpkg', '--print-architecture'], ), args)
180
181 def test_get_package_1x(self):
163 def subprocessor(*args, **kwargs):182 def subprocessor(*args, **kwargs):
164 command = args[0]183 command = args[0]
165 if 'lsb_release' in command:184 if 'lsb_release' in command:
166185
=== modified file 'tests/test_jujuci.py'
--- tests/test_jujuci.py 2016-07-01 15:50:09 +0000
+++ tests/test_jujuci.py 2016-11-01 14:01:39 +0000
@@ -10,7 +10,6 @@
10from jujuci import (10from jujuci import (
11 add_artifacts,11 add_artifacts,
12 Artifact,12 Artifact,
13 CERTIFY_UBUNTU_PACKAGES,
14 clean_environment,13 clean_environment,
15 Credentials,14 Credentials,
16 CredentialsMissing,15 CredentialsMissing,
@@ -18,7 +17,6 @@
18 get_artifacts,17 get_artifacts,
19 get_build_data,18 get_build_data,
20 get_buildvars,19 get_buildvars,
21 get_certification_bin,
22 get_credentials,20 get_credentials,
23 get_job_data,21 get_job_data,
24 get_juju_bin,22 get_juju_bin,
@@ -481,33 +479,6 @@
481 JENKINS_URL, credentials, 'build-binary-wacky-a64', 'lastBuild')479 JENKINS_URL, credentials, 'build-binary-wacky-a64', 'lastBuild')
482 self.assertEqual(1, jnf_mock.call_count)480 self.assertEqual(1, jnf_mock.call_count)
483481
484 def test_get_certification_bin(self):
485 package_namer = PackageNamer('foo', 'bar', 'baz')
486 build_data = {
487 'url': 'http://foo/',
488 'artifacts': [{
489 'fileName': 'juju-core_36.1~0ubuntu1~bar.1_foo.deb',
490 'relativePath': 'baz',
491 }]
492 }
493 credentials = Credentials('jrandom', 'password1')
494
495 with self.get_juju_binary_mocks() as (workspace, ur_mock, cc_mock):
496 with patch('jujuci.get_build_data', return_value=build_data,
497 autospec=True) as gbd_mock:
498 with patch.object(PackageNamer, 'factory',
499 return_value=package_namer):
500 bin_loc = get_certification_bin(credentials,
501 '36.1~0ubuntu1',
502 workspace)
503 self.assertEqual(bin_loc, os.path.join(
504 workspace, 'extracted-bin', 'subdir', 'sub-subdir', 'juju'))
505 ur_mock.assert_called_once_with(
506 'http://jrandom:password1@foo/artifact/baz',
507 os.path.join(workspace, 'juju-core_36.1~0ubuntu1~bar.1_foo.deb'))
508 gbd_mock.assert_called_once_with(
509 JENKINS_URL, credentials, CERTIFY_UBUNTU_PACKAGES, 'lastBuild')
510
511 @contextmanager482 @contextmanager
512 def get_juju_binary_mocks(self):483 def get_juju_binary_mocks(self):
513 def mock_extract_deb(args):484 def mock_extract_deb(args):
@@ -749,16 +720,16 @@
749class TestPackageNamer(TestNamer):720class TestPackageNamer(TestNamer):
750721
751 def test_get_release_package(self):722 def test_get_release_package(self):
752 package_namer = PackageNamer('amd42', '42.34', 'wacky')723 package_namer = PackageNamer('amd42', '18.04', 'wacky')
753 self.assertEqual(724 self.assertEqual(
754 package_namer.get_release_package('27.6'),725 package_namer.get_release_package('1.25'),
755 'juju-core_27.6-0ubuntu1~42.34.1~juju1_amd42.deb')726 'juju-core_1.25-0ubuntu1~18.04.1~juju1_amd42.deb')
756727
757 def test_get_certification_package(self):728 def test_get_juju_package_name(self):
758 package_namer = PackageNamer('amd42', '42.34', 'wacky')729 self.assertEqual(
759 self.assertEqual(730 'juju-core', PackageNamer.get_juju_package_name('1.2.3'))
760 package_namer.get_certification_package('27.6~0ubuntu1'),731 self.assertEqual(
761 'juju-core_27.6~0ubuntu1~42.34.1_amd42.deb')732 'juju2', PackageNamer.get_juju_package_name('2.2.3'))
762733
763734
764class TestJobNamer(TestNamer):735class TestJobNamer(TestNamer):
765736
=== modified file 'tests/test_s3ci.py'
--- tests/test_s3ci.py 2016-02-19 06:41:06 +0000
+++ tests/test_s3ci.py 2016-11-01 14:01:39 +0000
@@ -146,11 +146,12 @@
146 return key146 return key
147147
148148
149def mock_package_key(revision_build, build=27, distro_release=None):149def mock_package_key(revision_build, build=27,
150 distro_release=None, version='1.24.0'):
150 namer = PackageNamer.factory()151 namer = PackageNamer.factory()
151 if distro_release is not None:152 if distro_release is not None:
152 namer.distro_release = distro_release153 namer.distro_release = distro_release
153 package = namer.get_release_package('109.6')154 package = namer.get_release_package(version)
154 job = JobNamer.factory().get_build_binary_job()155 job = JobNamer.factory().get_build_binary_job()
155 return mock_key(revision_build, job, build, package)156 return mock_key(revision_build, job, build, package)
156157
@@ -177,8 +178,18 @@
177 use_context(self, patch('utility.get_deb_arch', return_value='amd65',178 use_context(self, patch('utility.get_deb_arch', return_value='amd65',
178 autospec=True))179 autospec=True))
179180
180 def test_find_package_key(self):181 def test_find_package_key_1x(self):
181 key = mock_package_key(390)182 key = mock_package_key(390, version='1.25.0')
183 bucket = mock_bucket([key])
184 namer = JobNamer.factory()
185 job = namer.get_build_binary_job()
186 found_key, filename = find_package_key(bucket, 390)
187 bucket.list.assert_called_once_with(get_job_path(390, job))
188 self.assertIs(key, found_key)
189 self.assertEqual(filename, get_key_filename(key))
190
191 def test_find_package_key_2x(self):
192 key = mock_package_key(390, version='2.1.0')
182 bucket = mock_bucket([key])193 bucket = mock_bucket([key])
183 namer = JobNamer.factory()194 namer = JobNamer.factory()
184 job = namer.get_build_binary_job()195 job = namer.get_build_binary_job()
@@ -201,7 +212,7 @@
201 find_package_key(bucket, 390)212 find_package_key(bucket, 390)
202213
203 def test_wrong_file(self):214 def test_wrong_file(self):
204 key = mock_package_key(390)215 key = mock_package_key(390, version='1.25.0')
205 key.name = key.name.replace('juju-core', 'juju-dore')216 key.name = key.name.replace('juju-core', 'juju-dore')
206 bucket = FakeBucket([key])217 bucket = FakeBucket([key])
207 with self.assertRaises(PackageNotFound):218 with self.assertRaises(PackageNotFound):

Subscribers

People subscribed via source and target branches