From 594718c5d7d9cb1f5ac32a9dd97a4ce53daa0041 Mon Sep 17 00:00:00 2001 From: "Jose R. Gonzalez" Date: Wed, 5 Jul 2023 11:43:49 -0500 Subject: [PATCH] Update test fixture to replace deprecated tag in image With the latest tag being removed, we needed to recreate all of the test fixtures to point to an image that actually exists. This also included regenerating report info, a fresh CI GPG key, resigning charts, etc. Signed-off-by: Jose R. Gonzalez --- internal/tool/pgp_test.go | 2 +- tests/README.md | 8 ++- .../0.1.11/community-report-info.json | 52 +++++++++++++++++- .../0.1.11/partner-report-info.json | 52 +++++++++++++++++- .../0.1.11/psql-service-0.1.11.tgz | Bin 2795 -> 2795 bytes .../0.1.11/psql-service-0.1.11.tgz.key | 34 ++++++------ .../0.1.11/psql-service-0.1.11.tgz.prov | 12 ++-- .../0.1.11/redhat-report-info.json | 52 +++++++++++++++++- .../0.1.8/community-report-info.json | 51 ++++++++++++++++- .../0.1.8/partner-report-info.json | 51 ++++++++++++++++- .../0.1.8/redhat-report-info.json | 51 ++++++++++++++++- .../0.1.9/community-report-info.json | 51 ++++++++++++++++- .../0.1.9/partner-report-info.json | 51 ++++++++++++++++- .../psql-service/0.1.9/psql-service-0.1.9.tgz | Bin 2798 -> 2864 bytes .../0.1.9/redhat-report-info.json | 51 ++++++++++++++++- 15 files changed, 482 insertions(+), 36 deletions(-) diff --git a/internal/tool/pgp_test.go b/internal/tool/pgp_test.go index 434d0d35..3b0a47e0 100644 --- a/internal/tool/pgp_test.go +++ b/internal/tool/pgp_test.go @@ -12,7 +12,7 @@ import ( var ( keyfileName = "../../tests/charts/psql-service/0.1.11/psql-service-0.1.11.tgz.key" - expectedDigest = "1cc31121e86388fad29e4cc6fc6660f102f43d8c52ce5f7d54e134c3cb94adc2" + expectedDigest = "e5ff2a2124a152af497deea4d4be2ba279a7daa43b39e182af3aa686daf12e1e" ) func TestPGPKeyEncoding(t *testing.T) { diff --git a/tests/README.md b/tests/README.md index 603f4cfa..30ccf699 100644 --- a/tests/README.md +++ b/tests/README.md @@ -37,9 +37,13 @@ As a result there are 6 tests. ### Signing the chart -The chart is signed using helm cli and a secret key. In this initial version the secret key used was one from Martin Mulholland. As a result the public key checked in for the test is also from Martin. +The signed chart tests have been signed with a key generated specifically for +these tests. When these are changed, a new keypair must be generated to use for +signing. The secret key can be thrown away. The private key can be thrown away. +The public key is all that's required for these tests to complete, and this key +is not to be used for anything else. -In the event the chart has to be updated, or a new chart added, the creator or updater of the chart can sign it use their own secret key, and create a copy of their public key to include with the test. +TODO: Generate a workflow that does this automagically in a container, etc. This is not ideal, we will investigate generating secret and public keys as art of the test using a bot id. diff --git a/tests/charts/psql-service/0.1.11/community-report-info.json b/tests/charts/psql-service/0.1.11/community-report-info.json index 36deb780..e4f9e04a 100644 --- a/tests/charts/psql-service/0.1.11/community-report-info.json +++ b/tests/charts/psql-service/0.1.11/community-report-info.json @@ -1 +1,51 @@ -{"annotations":[{"name":"charts.openshift.io/digest","value":"sha256:df41f5fb2134bceb4b3340c1bf795cc6191835250738cae089aa2c278db04491"},{"name":"charts.openshift.io/lastCertifiedTimestamp","value":"2023-01-13T15:57:24.152818-05:00"},{"name":"charts.openshift.io/testedOpenShiftVersion","value":"4.11"},{"name":"charts.openshift.io/supportedOpenShiftVersions","value":"\u003e=4.7"}],"digests":{"chart":"sha256:df41f5fb2134bceb4b3340c1bf795cc6191835250738cae089aa2c278db04491","package":"1205312f570d9608d17626f559c9280c2dde9b37ae0e6214c00c0e16c477fe10","publicKey":"1cc31121e86388fad29e4cc6fc6660f102f43d8c52ce5f7d54e134c3cb94adc2"},"metadata":{"vendorType":"community","profileVersion":"v1.2","webCatalogOnly":false,"chart-uri":"psql-service-0.1.11.tgz","chart":{"name":"psql-service","version":"0.1.11","description":"A Helm chart for a RedHat Certified PSQL","apiVersion":"v2","appVersion":"10.0.0","annotations":{"charts.openshift.io/archs":"x86_64","charts.openshift.io/name":"PSQL RedHat Demo Chart","charts.openshift.io/provider":"RedHat","charts.openshift.io/supportURL":"https://github.com/dperaza4dustbit/helm-chart"},"kubeVersion":"\u003e=1.20.0","type":"application"}},"results":{"passed":"1","failed":"0","message":null}} +{ + "annotations": [ + { + "name": "charts.openshift.io/digest", + "value": "sha256:df41f5fb2134bceb4b3340c1bf795cc6191835250738cae089aa2c278db04491" + }, + { + "name": "charts.openshift.io/lastCertifiedTimestamp", + "value": "2023-01-13T15:57:24.152818-05:00" + }, + { + "name": "charts.openshift.io/testedOpenShiftVersion", + "value": "4.11" + }, + { + "name": "charts.openshift.io/supportedOpenShiftVersions", + "value": "\u003e=4.7" + } + ], + "digests": { + "chart": "sha256:df41f5fb2134bceb4b3340c1bf795cc6191835250738cae089aa2c278db04491", + "package": "1205312f570d9608d17626f559c9280c2dde9b37ae0e6214c00c0e16c477fe10", + "publicKey": "1cc31121e86388fad29e4cc6fc6660f102f43d8c52ce5f7d54e134c3cb94adc2" + }, + "metadata": { + "vendorType": "community", + "profileVersion": "v1.2", + "webCatalogOnly": false, + "chart-uri": "psql-service-0.1.11.tgz", + "chart": { + "name": "psql-service", + "version": "0.1.11", + "description": "A Helm chart for a RedHat Certified PSQL", + "apiVersion": "v2", + "appVersion": "10.0.0", + "annotations": { + "charts.openshift.io/archs": "x86_64", + "charts.openshift.io/name": "PSQL RedHat Demo Chart", + "charts.openshift.io/provider": "RedHat", + "charts.openshift.io/supportURL": "https://github.com/dperaza4dustbit/helm-chart" + }, + "kubeVersion": "\u003e=1.20.0", + "type": "application" + } + }, + "results": { + "passed": "1", + "failed": "0", + "message": null + } +} \ No newline at end of file diff --git a/tests/charts/psql-service/0.1.11/partner-report-info.json b/tests/charts/psql-service/0.1.11/partner-report-info.json index a86af841..08f1353a 100644 --- a/tests/charts/psql-service/0.1.11/partner-report-info.json +++ b/tests/charts/psql-service/0.1.11/partner-report-info.json @@ -1 +1,51 @@ -{"annotations":[{"name":"charts.openshift.io/digest","value":"sha256:df41f5fb2134bceb4b3340c1bf795cc6191835250738cae089aa2c278db04491"},{"name":"charts.openshift.io/lastCertifiedTimestamp","value":"2023-01-13T15:54:52.070001-05:00"},{"name":"charts.openshift.io/testedOpenShiftVersion","value":"4.11"},{"name":"charts.openshift.io/supportedOpenShiftVersions","value":"\u003e=4.7"}],"digests":{"chart":"sha256:df41f5fb2134bceb4b3340c1bf795cc6191835250738cae089aa2c278db04491","package":"1205312f570d9608d17626f559c9280c2dde9b37ae0e6214c00c0e16c477fe10","publicKey":"1cc31121e86388fad29e4cc6fc6660f102f43d8c52ce5f7d54e134c3cb94adc2"},"metadata":{"vendorType":"partner","profileVersion":"v1.2","webCatalogOnly":false,"chart-uri":"psql-service-0.1.11.tgz","chart":{"name":"psql-service","version":"0.1.11","description":"A Helm chart for a RedHat Certified PSQL","apiVersion":"v2","appVersion":"10.0.0","annotations":{"charts.openshift.io/archs":"x86_64","charts.openshift.io/name":"PSQL RedHat Demo Chart","charts.openshift.io/provider":"RedHat","charts.openshift.io/supportURL":"https://github.com/dperaza4dustbit/helm-chart"},"kubeVersion":"\u003e=1.20.0","type":"application"}},"results":{"passed":"13","failed":"0","message":null}} +{ + "annotations": [ + { + "name": "charts.openshift.io/digest", + "value": "sha256:5a5584c48c449861d1ef23325d91a4fa1fd838e7754558e32119986f5b8dfeed" + }, + { + "name": "charts.openshift.io/lastCertifiedTimestamp", + "value": "2023-01-13T15:54:52.070001-05:00" + }, + { + "name": "charts.openshift.io/testedOpenShiftVersion", + "value": "4.11" + }, + { + "name": "charts.openshift.io/supportedOpenShiftVersions", + "value": "\u003e=4.7" + } + ], + "digests": { + "chart": "sha256:5a5584c48c449861d1ef23325d91a4fa1fd838e7754558e32119986f5b8dfeed", + "package": "defaa409927744f7a2caa0b18467c28fc2343b3a2bd8d2fe8a104cd72d66c0c2", + "publicKey": "e5ff2a2124a152af497deea4d4be2ba279a7daa43b39e182af3aa686daf12e1e" + }, + "metadata": { + "vendorType": "partner", + "profileVersion": "v1.2", + "webCatalogOnly": false, + "chart-uri": "psql-service-0.1.11.tgz", + "chart": { + "name": "psql-service", + "version": "0.1.11", + "description": "A Helm chart for a RedHat Certified PSQL", + "apiVersion": "v2", + "appVersion": "10.0.0", + "annotations": { + "charts.openshift.io/archs": "x86_64", + "charts.openshift.io/name": "PSQL RedHat Demo Chart", + "charts.openshift.io/provider": "RedHat", + "charts.openshift.io/supportURL": "https://github.com/dperaza4dustbit/helm-chart" + }, + "kubeVersion": "\u003e=1.20.0", + "type": "application" + } + }, + "results": { + "passed": "13", + "failed": "0", + "message": null + } +} \ No newline at end of file diff --git a/tests/charts/psql-service/0.1.11/psql-service-0.1.11.tgz b/tests/charts/psql-service/0.1.11/psql-service-0.1.11.tgz index 4e9ec2e396860e4957b038643f15183346abdd72..6b8c703c5501e85a2eb94bcac7d5d8aae751bb5f 100644 GIT binary patch delta 2763 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 R{u=-Q|Nn6N+9Ciz001%dgNOhC delta 2763 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 O!2bYAwsGPBPyhhu*RK}< literal 2798 zcmVDc zVQyr3R8em|NM&qo0PH*eZ`-!=`B^~!hx;fU`el1=b6NQI=FdTHL@{y(|(B0YF+1Y~NUZq$8xl}}K1)t5U z-MRk~AdGQE6y;2Y4nU-5fb@BWOit-o`IL8vh^8`x58v*c?e$mSFp^>jgW)f);S}Sa zh=LfPz<5T;6HGVF9FR88}dAMvykXDG;@q#x%} zji~BOF-bi`#~~Sgk3v$;LYVa&l4aFvH}C^LaAK5^pqVmd2k;Xnsg(i7TmUJ%a)?6F zF~!()&^gaXSW$ZR|KE50UhvGZ8mOC-qvjcgK(Z{Mkx{WTE1Ly=*ZfJk}CMI6FKjw7BBi2~~gM?{ekkr;yZ zJAy~&QuClGnV?}&c!dJ}BJsL`C#IO}>q>zcmsD{v55W~Up;C#tPofB=^aaLKqKuCd zQyC>4*D%hLWWW;|%|m!KKH+L0P$E;hPLW9nu2HUXZD%tc4>8IGRr5p66n;=4Xw!cx+(3C3s2oPntVVT<36jP(3ZtvTlsny#>j`Ei1k8NOob6Dp8Wi-W< z_5Z^ZjE z@V@iTe*gNZTSL2ECHH;s@;jg8R@263aC?4`T#~u`c!Dz&AM0z_izaWU{dB!#4lSJu zH-uQL+UxdQ{LCpyH2|X-!DG>ZuI5BI9B@k5*%+%JoD?6j}E}~ zW4rBpgU0$_1?Qc!DJB^T>8tGXw}NZd|DFEMUTgi|>-Baw>;FT*)m7)EbNnGAECw}2 zvta=~HqRy%;yW)p*VoR~l?O47DMN7U+e5R^fw#agdr9AB67}v3{P#Ah)R=E(C`$^HCqvk^#)eyeed(p+-T$IWT zmSuYTDYpEvG4X06sx76+bbU) zRbHxz=0{e5)^hQDX~!4d&wsIs9;^4X<{wJRZt>vWiogvY@Yt*KmxmScUyND8=P9!L zI1XGF|MhnJ?f7rMzlr}I1nP%mB+F!H)^*M)i$gf7rht>8A~8`UtTNi#+Y|<6v-8?o z0Je3l%t+KmDfa6Yt99n6;ihNHh)^CMhahF@=zvS3mj2W>ONol6*0qMPAhc4t;q(lr{7Xm<4u->D-<%%Zg>0FPSws5h;O)T=2gBpL zkS^0M%Sa#oba49i?EUfS@YS1>gbopIe#f)fAE zGE@z3N+FQMl%bRZ!ADq^L`B(pf;UN7kFZS4OcV5$8Nc)Y~+-6bg| zFA^9d(@VMZ%*CU>z6*5A6yuchbJuQhJeiy8P?g)*zT3E(uP|kU z+O@75_=|J*dScVIey}~skAM5ENW{~Wu(+;{&WN(kh{$QJ%)_Ym_OTvt%8LZN7@jT> z4ZLYlpTX0Ct{EPmzJGOid^UJ<`WC!*jaFLg;6>otwE()V$v$XLqsn16_a7dA5oq{- zUt1uZFfQ;ud9029cG~y<`@v3skdf$|Oi=pe zP2l26z63eNB!Nl7M>ZEn+2k7#m=Hy02pLh+S~+2{vkeR<#^=NHOyHP)z!)y6n!^9R z@Zk+h=D?Y0sYTLTKu9P<-|>%zXG6sWI@?ejV7)&aLQI8p{0UVZ^J~R-{L!DHV}8qm z>7=87%2zpKoduy0iO%!P++~)|OJ81Q&P#tp&YhROO7$}rbmF}Hx3dlJiJ&}}@apJT zI(}xCGsmYfl8!|e{13;U$%x0;d3@_$4-NZ2Jw7=4`Pfh6`{l9D{)2w|{>M&tcN70T z2(-R=F>72mfT;T9#l#?wE#(Hj6g2E#