Merge ~chad.smith/ubuntu/+source/ubuntu-advantage-tools:release-27-groovy into ubuntu/+source/ubuntu-advantage-tools:ubuntu/devel

Proposed by Chad Smith
Status: Merged
Approved by: Bryce Harrington
Approved revision: ef1f90890747ebc4a74f707d72395c3d5bfa23d8
Merge reported by: Chad Smith
Merged at revision: a186c591bcab0b8758307d850718e604de61b7d7
Proposed branch: ~chad.smith/ubuntu/+source/ubuntu-advantage-tools:release-27-groovy
Merge into: ubuntu/+source/ubuntu-advantage-tools:ubuntu/devel
Diff against target: 398 lines (+200/-5) (has conflicts)
10 files modified
.gitignore (+8/-0)
Jenkinsfile (+16/-0)
apt-hook/Makefile (+30/-0)
apt-hook/json-hook-src/go.mod (+4/-0)
apt-hook/json-hook-src/json-hook.go (+42/-0)
apt-hook/json-hook-src/json-hook_test.go (+34/-0)
debian/changelog (+20/-0)
debian/control (+7/-0)
debian/rules (+1/-0)
uaclient/tests/test_util.py (+38/-5)
Conflict in .gitignore
Conflict in Jenkinsfile
Conflict in apt-hook/Makefile
Conflict in apt-hook/json-hook-src/go.mod
Conflict in apt-hook/json-hook-src/json-hook.go
Conflict in apt-hook/json-hook-src/json-hook_test.go
Conflict in debian/changelog
Conflict in debian/control
Conflict in uaclient/tests/test_util.py
Reviewer Review Type Date Requested Status
Bryce Harrington (community) Approve
Review via email: mp+401983@code.launchpad.net

Description of the change

New upstream release of 27.0 for release into groovy

Avoiding rich commit history because this is a branch new client (python instead of bash) which represented a major upgrade that is backwards incompatible.

We will be following this verification procedure for SRU of ubuntu-advantage-tools in order to release into groovy: https://wiki.ubuntu.com/UbuntuAdvantageToolsUpdates

Note that groovy doesn't have esm-infra, esm-apps or FIPS product offerings so this client will not allow enabling any UA services:

Expect messages like:

root@test-g:~# ua enable esm-apps
One moment, checking your subscription first
ESM Apps is not available for Ubuntu 20.10 (Groovy Gorilla)

Functional equivalent debs have been uploaded to this ppa for testing https://launchpad.net/~orndorffgrant/+archive/ubuntu/uaclient-staging-27

to test:
$ cat > 27_test_setup.yaml <<EOF
#cloud-config
write_files:
- content: |
    # Ubuntu-Advantage client config file.
    contract_url: 'https://contracts.canonical.com'
    data_dir: /var/lib/ubuntu-advantage
    log_level: debug
    log_file: /var/log/ubuntu-advantage.log
    features:
        allow_beta: true
  owner: root:root
  path: /etc/ubuntu-advantage/uaclient.conf
  permissions: '0644'
apt:
  sources:
    ua_staging_ppa:
        source: 'deb http://ppa.launchpad.net/orndorffgrant/uaclient-staging-27/ubuntu \$RELEASE main'
        keyid: 74E59E9E
packages: [ubuntu-advantage-tools]
EOF

$ lxc launch ubuntu-daily:xenial test-27-x -c user.user-data="$(cat 27_test_setup.yaml)"
$ lxc exec test-27-x -- cloud-init status --wait --long # wait for pkg installs

$ lxc exec test-27-x -- ua version

$ lxc exec test-27-x -- ua status # show unattached

This machine is not attached to a UA subscription.
See https://ubuntu.com/advantage

# attach with token from https://ubuntu.com/advantage
$ lxc exec test-27-x -- ua attach <REDACTED>
# assert esm-infra auto enabled

# no failures on attach
root@test-27-h:~# grep Traceback /var/log/ubuntu-advantage.log

# assert default contract not authorized to esm-apps
$ lxc exec test-27-x -- ua enable esm-apps

will manipulate other subcommands

To post a comment you must log in.
1ff489a... by Grant Orndorff

apt-hook: mitigate failures with true

In case something catastrophic happens
in our apt hooks, we now make sure the subprocess
always returns successfully by calling `true`
if our hook fails.

Revision history for this message
Bryce Harrington (bryce) wrote :

While it's unlikely groovy will be an upgrade path for ESM users, it's good to include this for completeness given it's still theoretically possible. My review has been super light, mainly just verifying the same changes are included as in the other branches.

Tagged and uploaded:

triage-groovy+20.10:~/pkg/UbuntuAdvantageTools/review-mp401983$ dput ubuntu ubuntu-advantage-tools_27.0~20.10.1_source.changes
Checking signature on .changes
gpg: /home/bryce/pkg/UbuntuAdvantageTools/review-mp401983/ubuntu-advantage-tools_27.0~20.10.1_source.changes: Valid signature from E603B2578FB8F0FB
Checking signature on .dsc
gpg: /home/bryce/pkg/UbuntuAdvantageTools/review-mp401983/ubuntu-advantage-tools_27.0~20.10.1.dsc: Valid signature from E603B2578FB8F0FB
Uploading to ubuntu (via ftp to upload.ubuntu.com):
  Uploading ubuntu-advantage-tools_27.0~20.10.1.dsc: done.
  Uploading ubuntu-advantage-tools_27.0~20.10.1.tar.xz: done.
  Uploading ubuntu-advantage-tools_27.0~20.10.1_source.buildinfo: done.
  Uploading ubuntu-advantage-tools_27.0~20.10.1_source.changes: done.
Successfully uploaded packages.
triage-groovy+20.10:~/pkg/UbuntuAdvantageTools/review-mp401983$ cd ubuntu-advantage-tools-gu/
triage-groovy+20.10:~/pkg/UbuntuAdvantageTools/review-mp401983/ubuntu-advantage-tools-gu$ git ubuntu tag --upload
triage-groovy+20.10:~/pkg/UbuntuAdvantageTools/review-mp401983/ubuntu-advantage-tools-gu$ git push -f pkg upload/27.0_20.10.1

Enumerating objects: 250, done.
Counting objects: 100% (250/250), done.
Delta compression using up to 12 threads
Compressing objects: 100% (118/118), done.
Writing objects: 100% (163/163), 212.83 KiB | 443.00 KiB/s, done.
Total 163 (delta 67), reused 117 (delta 42), pack-reused 0
remote: Resolving deltas: 100% (67/67), completed with 53 local objects.
To ssh://git.launchpad.net/ubuntu/+source/ubuntu-advantage-tools
 * [new tag] upload/27.0_20.10.1 -> upload/27.0_20.10.1

review: Approve
b32b476... by Grant Orndorff

apt-hook: refactor json hook messaging to be dry

The message construction code in the json hook
was pretty repetitive. This cleans it up a bit
and also removes some unnecessary explicit struct
names in the tests.

4053b40... by Grant Orndorff

apt-hook: ignore go hook on some architectures

Golang doesn't support powerpc and riscv on older versions.
This configures our Build-Depends and Makefile to gracefully
handle scenarios where we can't build our go hook. We will
simply not ship the go hook in these limited scenarios.

Fixes: #1603

d32eef4... by Grant Orndorff

build: order build-depends alternatives newer first

When using alternatives in the Build-Depends section of
debian/control, we should always put the newer version of
a package first. This is because sbuild doesn't resolve
alternatives by default and we want sbuild to work on the
latest version of ubuntu with default settings.

LP: #1926949

f30579b... by Grant Orndorff

tests: fix subp ls error case

3bfe06c... by Chad Smith

changelog 27.0.1 & 27.0.2

4da4d2b... by Chad Smith

jenkinsfile: trusty sbuild --resolve-depends for CI runs

a186c59... by Chad Smith

changelog: 27.0.2~20.10.1

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/.gitignore b/.gitignore
index 2b2da67..29b86f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,11 @@ ubuntu_advantage_tools.dsc
22# test/jenkins artifacts22# test/jenkins artifacts
23pytest_results.xml23pytest_results.xml
24reports/24reports/
25<<<<<<< .gitignore
26=======
27
28# apt-hook build artifacts
29apt-hook/hook
30apt-hook/ubuntu-advantage.pot
31apt-hook/json-hook-src/json-hook
32>>>>>>> .gitignore
diff --git a/Jenkinsfile b/Jenkinsfile
index 2082e19..925a9c3 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -87,7 +87,11 @@ pipeline {
87 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}87 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
88 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}88 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
89 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .89 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
90<<<<<<< Jenkinsfile
90 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc91 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
92=======
93 sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
94>>>>>>> Jenkinsfile
91 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb95 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
92 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb96 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
93 '''97 '''
@@ -108,7 +112,11 @@ pipeline {
108 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}112 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
109 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}113 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
110 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .114 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
115<<<<<<< Jenkinsfile
111 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc116 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
117=======
118 sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
119>>>>>>> Jenkinsfile
112 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb120 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
113 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb121 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
114 '''122 '''
@@ -129,7 +137,11 @@ pipeline {
129 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}137 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
130 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}138 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
131 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .139 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
140<<<<<<< Jenkinsfile
132 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc141 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
142=======
143 sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
144>>>>>>> Jenkinsfile
133 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb145 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
134 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb146 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
135 '''147 '''
@@ -150,7 +162,11 @@ pipeline {
150 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}162 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
151 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}163 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
152 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .164 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
165<<<<<<< Jenkinsfile
153 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc166 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
167=======
168 sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
169>>>>>>> Jenkinsfile
154 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb170 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
155 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb171 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
156 '''172 '''
diff --git a/apt-hook/Makefile b/apt-hook/Makefile
index 15c4856..11294b1 100644
--- a/apt-hook/Makefile
+++ b/apt-hook/Makefile
@@ -1,3 +1,21 @@
1# the go hook steps will be skipped if this is a nonempty string
2SKIP_GO_HOOK = ""
3
4GO_BIN = $(shell which go)
5# Try go-1.14 and go-1.10 if not in path
6ifeq ($(GO_BIN),)
7 ifneq ($(wildcard /usr/lib/go-1.14/bin/go),)
8 GO_BIN = /usr/lib/go-1.14/bin/go
9 else ifneq ($(wildcard /usr/lib/go-1.10/bin/go),)
10 GO_BIN = /usr/lib/go-1.10/bin/go
11 endif
12endif
13
14# If still not found then just don't build the go hook
15ifeq ($(GO_BIN),)
16 SKIP_GO_HOOK = "1"
17endif
18
1all: build19all: build
220
3build: hook ubuntu-advantage.pot json-hook21build: hook ubuntu-advantage.pot json-hook
@@ -9,15 +27,27 @@ hook: hook.cc
9 $(CXX) -Wall -Wextra -pedantic -std=c++11 $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -g -o hook hook.cc -lapt-pkg $(LDLIBS)27 $(CXX) -Wall -Wextra -pedantic -std=c++11 $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -g -o hook hook.cc -lapt-pkg $(LDLIBS)
1028
11json-hook:29json-hook:
30<<<<<<< apt-hook/Makefile
12 cd json-hook-src && GOCACHE=/tmp/ go build json-hook.go31 cd json-hook-src && GOCACHE=/tmp/ go build json-hook.go
32=======
33 [ $(SKIP_GO_HOOK) ] || (cd json-hook-src && GOCACHE=/tmp/ $(GO_BIN) build json-hook.go)
34>>>>>>> apt-hook/Makefile
1335
14install: hook json-hook36install: hook json-hook
15 install -D -m 644 20apt-esm-hook.conf $(DESTDIR)/etc/apt/apt.conf.d/20apt-esm-hook.conf37 install -D -m 644 20apt-esm-hook.conf $(DESTDIR)/etc/apt/apt.conf.d/20apt-esm-hook.conf
16 install -D -m 755 hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-hook38 install -D -m 755 hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-hook
39<<<<<<< apt-hook/Makefile
17 install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook40 install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook
41=======
42 [ $(SKIP_GO_HOOK) ] || install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook
43>>>>>>> apt-hook/Makefile
1844
19clean:45clean:
20 rm -f hook ubuntu-advantage.pot json-hook-src/json-hook46 rm -f hook ubuntu-advantage.pot json-hook-src/json-hook
2147
22test:48test:
49<<<<<<< apt-hook/Makefile
23 cd json-hook-src && go test50 cd json-hook-src && go test
51=======
52 [ $(SKIP_GO_HOOK) ] || (cd json-hook-src && GOCACHE=/tmp/ $(GO_BIN) test)
53>>>>>>> apt-hook/Makefile
diff --git a/apt-hook/json-hook-src/go.mod b/apt-hook/json-hook-src/go.mod
index 66726af..2823e25 100644
--- a/apt-hook/json-hook-src/go.mod
+++ b/apt-hook/json-hook-src/go.mod
@@ -1,3 +1,7 @@
1module json-hook1module json-hook
22
3<<<<<<< apt-hook/json-hook-src/go.mod
3go 1.24go 1.2
5=======
6go 1.7
7>>>>>>> apt-hook/json-hook-src/go.mod
diff --git a/apt-hook/json-hook-src/json-hook.go b/apt-hook/json-hook-src/json-hook.go
index 0f2e3eb..fc6b704 100644
--- a/apt-hook/json-hook-src/json-hook.go
+++ b/apt-hook/json-hook-src/json-hook.go
@@ -45,6 +45,21 @@ type jsonRPC struct {
45 } `json:"params"`45 } `json:"params"`
46}46}
4747
48<<<<<<< apt-hook/json-hook-src/json-hook.go
49=======
50func updatesFromSource(count int, source string, first bool) string {
51 security := ""
52 if first {
53 security = "security "
54 }
55 updates := "updates"
56 if count == 1 {
57 updates = "update"
58 }
59 return fmt.Sprintf("%d %s %s%s", count, source, security, updates)
60}
61
62>>>>>>> apt-hook/json-hook-src/json-hook.go
48func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCount int) string {63func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCount int) string {
49 displayStandard := true64 displayStandard := true
50 displayEsmInfra := true65 displayEsmInfra := true
@@ -72,6 +87,7 @@ func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCo
72 }87 }
7388
74 standardUpdates := ""89 standardUpdates := ""
90<<<<<<< apt-hook/json-hook-src/json-hook.go
75 esmInfraUpdates := ""91 esmInfraUpdates := ""
76 esmAppsUpdates := ""92 esmAppsUpdates := ""
77 if displayStandard {93 if displayStandard {
@@ -118,6 +134,32 @@ func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCo
118 }134 }
119135
120 return standardUpdates + esmInfraUpdates + esmAppsUpdates136 return standardUpdates + esmInfraUpdates + esmAppsUpdates
137=======
138 afterStandard := ""
139 esmInfraUpdates := ""
140 afterInfra := ""
141 esmAppsUpdates := ""
142
143 if displayStandard {
144 standardUpdates = updatesFromSource(standardSecurityCount, "standard", true)
145 if displayEsmInfra && displayEsmApps {
146 afterStandard = ", "
147 } else if displayEsmInfra || displayEsmApps {
148 afterStandard = " and "
149 }
150 }
151 if displayEsmInfra {
152 esmInfraUpdates = updatesFromSource(esmInfraCount, "esm-infra", esmInfraFirst)
153 if displayEsmApps {
154 afterInfra = " and "
155 }
156 }
157 if displayEsmApps {
158 esmAppsUpdates = updatesFromSource(esmAppsCount, "esm-apps", esmAppsFirst)
159 }
160
161 return standardUpdates + afterStandard + esmInfraUpdates + afterInfra + esmAppsUpdates
162>>>>>>> apt-hook/json-hook-src/json-hook.go
121}163}
122164
123func fromOriginAndArchive(pkgVersion jsonRPCPackageVersion, origin string, archive string) bool {165func fromOriginAndArchive(pkgVersion jsonRPCPackageVersion, origin string, archive string) bool {
diff --git a/apt-hook/json-hook-src/json-hook_test.go b/apt-hook/json-hook-src/json-hook_test.go
index cfc1788..135ec2c 100644
--- a/apt-hook/json-hook-src/json-hook_test.go
+++ b/apt-hook/json-hook-src/json-hook_test.go
@@ -14,6 +14,7 @@ func TestCreateUpdateMessages(t *testing.T) {
14 expectedMessage string14 expectedMessage string
15 }15 }
16 testParamsList := []params{16 testParamsList := []params{
17<<<<<<< apt-hook/json-hook-src/json-hook_test.go
17 params{0, 0, 0, ""},18 params{0, 0, 0, ""},
18 params{0, 0, 1, "1 esm-apps security update"},19 params{0, 0, 1, "1 esm-apps security update"},
19 params{0, 0, 2, "2 esm-apps security updates"},20 params{0, 0, 2, "2 esm-apps security updates"},
@@ -41,6 +42,35 @@ func TestCreateUpdateMessages(t *testing.T) {
41 params{2, 2, 0, "2 standard security updates and 2 esm-infra updates"},42 params{2, 2, 0, "2 standard security updates and 2 esm-infra updates"},
42 params{2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},43 params{2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},
43 params{2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},44 params{2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},
45=======
46 {0, 0, 0, ""},
47 {0, 0, 1, "1 esm-apps security update"},
48 {0, 0, 2, "2 esm-apps security updates"},
49 {0, 1, 0, "1 esm-infra security update"},
50 {0, 1, 1, "1 esm-infra security update and 1 esm-apps update"},
51 {0, 1, 2, "1 esm-infra security update and 2 esm-apps updates"},
52 {0, 2, 0, "2 esm-infra security updates"},
53 {0, 2, 1, "2 esm-infra security updates and 1 esm-apps update"},
54 {0, 2, 2, "2 esm-infra security updates and 2 esm-apps updates"},
55 {1, 0, 0, "1 standard security update"},
56 {1, 0, 1, "1 standard security update and 1 esm-apps update"},
57 {1, 0, 2, "1 standard security update and 2 esm-apps updates"},
58 {1, 1, 0, "1 standard security update and 1 esm-infra update"},
59 {1, 1, 1, "1 standard security update, 1 esm-infra update and 1 esm-apps update"},
60 {1, 1, 2, "1 standard security update, 1 esm-infra update and 2 esm-apps updates"},
61 {1, 2, 0, "1 standard security update and 2 esm-infra updates"},
62 {1, 2, 1, "1 standard security update, 2 esm-infra updates and 1 esm-apps update"},
63 {1, 2, 2, "1 standard security update, 2 esm-infra updates and 2 esm-apps updates"},
64 {2, 0, 0, "2 standard security updates"},
65 {2, 0, 1, "2 standard security updates and 1 esm-apps update"},
66 {2, 0, 2, "2 standard security updates and 2 esm-apps updates"},
67 {2, 1, 0, "2 standard security updates and 1 esm-infra update"},
68 {2, 1, 1, "2 standard security updates, 1 esm-infra update and 1 esm-apps update"},
69 {2, 1, 2, "2 standard security updates, 1 esm-infra update and 2 esm-apps updates"},
70 {2, 2, 0, "2 standard security updates and 2 esm-infra updates"},
71 {2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},
72 {2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},
73>>>>>>> apt-hook/json-hook-src/json-hook_test.go
44 }74 }
4575
46 for i, testParams := range testParamsList {76 for i, testParams := range testParamsList {
@@ -62,7 +92,11 @@ func TestCountSecurityUpdates(t *testing.T) {
62 expectedEsmAppsCount int92 expectedEsmAppsCount int
63 }93 }
64 testParamsList := []params{94 testParamsList := []params{
95<<<<<<< apt-hook/json-hook-src/json-hook_test.go
65 params{mockJson, 1, 2, 3},96 params{mockJson, 1, 2, 3},
97=======
98 {mockJson, 1, 2, 3},
99>>>>>>> apt-hook/json-hook-src/json-hook_test.go
66 }100 }
67101
68 for i, testParams := range testParamsList {102 for i, testParams := range testParamsList {
diff --git a/debian/changelog b/debian/changelog
index 9c6e17f..9e60d7f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,19 @@
1<<<<<<< debian/changelog
2=======
3ubuntu-advantage-tools (27.0.2~20.10.1) groovy; urgency=medium
4
5 * d/control:
6 - order build-depends alternatives newer first (LP: #1926949)
7 - apt-hook: do not attempt to package go APT JSON hook on some
8 architectures (GH: #1603) (LP: #1927795)
9 * Bug-fix release 27.0.2: build failures on riscv64 and powerpc
10 - apt-hook: refactor json hook messaging to be dry
11 - tests: fix subp ls error case for powerpc builds
12 - jenkinsfile: add --resolve-alternatives for trusty builds
13
14 -- Chad Smith <chad.smith@canonical.com> Fri, 07 May 2021 11:58:03 -0600
15
16>>>>>>> debian/changelog
1ubuntu-advantage-tools (27.0.1) impish; urgency=medium17ubuntu-advantage-tools (27.0.1) impish; urgency=medium
218
3 * Add .gitignore and cleanup ignored directory .pytest_cache19 * Add .gitignore and cleanup ignored directory .pytest_cache
@@ -8,6 +24,10 @@ ubuntu-advantage-tools (27.0.1) impish; urgency=medium
8ubuntu-advantage-tools (27.0) impish; urgency=medium24ubuntu-advantage-tools (27.0) impish; urgency=medium
925
10 * New upstream release 27.0:26 * New upstream release 27.0:
27<<<<<<< debian/changelog
28=======
29 - apt-hook: mitigate failures with true
30>>>>>>> debian/changelog
11 - messages: add optional (s) to apt messaging to include31 - messages: add optional (s) to apt messaging to include
12 singular/plural pkgs32 singular/plural pkgs
13 - apt-hook: avoid reporting and counting duplicate package33 - apt-hook: avoid reporting and counting duplicate package
diff --git a/debian/control b/debian/control
index cd28a1f..660a80d 100644
--- a/debian/control
+++ b/debian/control
@@ -6,10 +6,17 @@ Build-Depends: bash-completion,
6 debhelper (>=9),6 debhelper (>=9),
7 debianutils,7 debianutils,
8 dh-python,8 dh-python,
9<<<<<<< debian/control
9 dh-systemd | debhelper (>= 13.3),10 dh-systemd | debhelper (>= 13.3),
10 gettext,11 gettext,
11 git,12 git,
12 golang,13 golang,
14=======
15 debhelper (>= 13.3) | dh-systemd,
16 gettext,
17 git,
18 golang-go (>= 2:1.14~) [!powerpc] | golang-1.14-go [!powerpc] | golang-1.10-go [!powerpc !riscv64],
19>>>>>>> debian/control
13 libapt-pkg-dev,20 libapt-pkg-dev,
14 po-debconf,21 po-debconf,
15 python3 (>= 3.4),22 python3 (>= 3.4),
diff --git a/debian/rules b/debian/rules
index 9bea522..57898f9 100755
--- a/debian/rules
+++ b/debian/rules
@@ -27,6 +27,7 @@ override_dh_auto_build:
2727
28override_dh_auto_test:28override_dh_auto_test:
29ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))29ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
30 make -C apt-hook test
30 python3 -m pytest31 python3 -m pytest
31ifdef FLAKE832ifdef FLAKE8
32 # required for Trusty: flake8 does not install a __main__ for -m33 # required for Trusty: flake8 does not install a __main__ for -m
diff --git a/uaclient/tests/test_util.py b/uaclient/tests/test_util.py
index 019faf2..29a5bd2 100644
--- a/uaclient/tests/test_util.py
+++ b/uaclient/tests/test_util.py
@@ -291,11 +291,12 @@ class TestSubp:
291 with pytest.raises(util.ProcessExecutionError) as excinfo:291 with pytest.raises(util.ProcessExecutionError) as excinfo:
292 util.subp(["ls", "--bogus"])292 util.subp(["ls", "--bogus"])
293293
294 expected_error = (294 expected_errors = [
295 "Failed running command 'ls --bogus' [exit(2)]."295 "Failed running command 'ls --bogus' [exit(2)].",
296 " Message: ls: unrecognized option"296 "ls: unrecognized option '--bogus'",
297 )297 ]
298 assert expected_error in str(excinfo.value)298 for msg in expected_errors:
299 assert msg in str(excinfo.value)
299 assert 0 == m_sleep.call_count # no retries300 assert 0 == m_sleep.call_count # no retries
300301
301 @mock.patch("uaclient.util.time.sleep")302 @mock.patch("uaclient.util.time.sleep")
@@ -795,6 +796,37 @@ class TestIsConfigValueTrue:
795 config=cfg.cfg, path_to_value="features.allow_beta"796 config=cfg.cfg, path_to_value="features.allow_beta"
796 )797 )
797 assert return_val == actual_val798 assert return_val == actual_val
799<<<<<<< uaclient/tests/test_util.py
800
801 @pytest.mark.parametrize(
802 "config_dict, key_val",
803 [
804 ({"allow_beta": "tru"}, "tru"),
805 ({"allow_beta": "Tre"}, "Tre"),
806 ({"allow_beta": "flse"}, "flse"),
807 ({"allow_beta": "Fale"}, "Fale"),
808 ],
809 )
810 def test_exception_is_config_value_true(
811 self, config_dict, key_val, FakeConfig
812 ):
813 path_to_value = "features.allow_beta"
814 cfg = FakeConfig()
815 cfg.override_features(config_dict)
816 with pytest.raises(exceptions.UserFacingError) as excinfo:
817 util.is_config_value_true(
818 config=cfg.cfg, path_to_value=path_to_value
819 )
820
821 expected_msg = status.ERROR_INVALID_CONFIG_VALUE.format(
822 path_to_value=path_to_value,
823 expected_value="boolean string: true or false",
824 value=key_val,
825 )
826 assert expected_msg == str(excinfo.value)
827
828
829=======
798830
799 @pytest.mark.parametrize(831 @pytest.mark.parametrize(
800 "config_dict, key_val",832 "config_dict, key_val",
@@ -824,6 +856,7 @@ class TestIsConfigValueTrue:
824 assert expected_msg == str(excinfo.value)856 assert expected_msg == str(excinfo.value)
825857
826858
859>>>>>>> uaclient/tests/test_util.py
827class TestRedactSensitiveLogs:860class TestRedactSensitiveLogs:
828 @pytest.mark.parametrize(861 @pytest.mark.parametrize(
829 "raw_log,expected",862 "raw_log,expected",

Subscribers

People subscribed via source and target branches

to status/vote changes: