11package models_test
22
33import (
4+ "encoding/json"
45 "fmt"
56 "net/url"
67 "testing"
@@ -10,6 +11,54 @@ import (
1011 "github.com/stretchr/testify/require"
1112)
1213
14+ func TestResponseBodyPackagesRoundTrip (t * testing.T ) {
15+ t .Parallel ()
16+
17+ // Sample response shape extracted from opentofu/opentofu RFC
18+ // 20251027-provider-registry-hashes.md, including the `packages` field that
19+ // carries per-platform hashes.
20+ raw := []byte (`{
21+ "protocols": ["5.0"],
22+ "os": "linux",
23+ "arch": "amd64",
24+ "filename": "terraform-provider-aws_5.31.0_linux_amd64.zip",
25+ "download_url": "https://example.com/terraform-provider-aws_5.31.0_linux_amd64.zip",
26+ "shasums_url": "https://example.com/SHA256SUMS",
27+ "shasum": "5f9c7aa76b7c34d722fc91111111111111111111111111111111111111111111",
28+ "signing_keys": {"gpg_public_keys": []},
29+ "packages": {
30+ "linux_amd64": {
31+ "hashes": ["zh:abc", "h1:def"],
32+ "package_size": 12345
33+ },
34+ "darwin_arm64": {
35+ "hashes": ["zh:ghi", "h1:jkl"],
36+ "package_size": 67890
37+ }
38+ }
39+ }` )
40+
41+ var body models.ResponseBody
42+ require .NoError (t , json .Unmarshal (raw , & body ))
43+
44+ require .Len (t , body .Packages , 2 )
45+ require .Contains (t , body .Packages , "linux_amd64" )
46+ assert .Equal (t , []string {"zh:abc" , "h1:def" }, body .Packages ["linux_amd64" ].Hashes )
47+ assert .Equal (t , int64 (12345 ), body .Packages ["linux_amd64" ].PackageSize )
48+ assert .Equal (t , []string {"zh:ghi" , "h1:jkl" }, body .Packages ["darwin_arm64" ].Hashes )
49+ }
50+
51+ func TestResponseBodyPackagesAbsent (t * testing.T ) {
52+ t .Parallel ()
53+
54+ raw := []byte (`{"os":"linux","arch":"amd64","filename":"x.zip","download_url":"https://example.com/x.zip","signing_keys":{"gpg_public_keys":[]}}` )
55+
56+ var body models.ResponseBody
57+ require .NoError (t , json .Unmarshal (raw , & body ))
58+
59+ assert .Nil (t , body .Packages )
60+ }
61+
1362func TestFilterValid (t * testing.T ) {
1463 t .Parallel ()
1564
@@ -112,39 +161,39 @@ func TestResolveRelativeReferences(t *testing.T) {
112161 expectedResolved models.ResponseBody
113162 }{
114163 {
115- "https://releases.hashicorp.com/terraform-provider-local/2.5.1" ,
116- models.ResponseBody {
164+ baseURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1" ,
165+ body : models.ResponseBody {
117166 DownloadURL : "terraform-provider-local_2.5.1_darwin_amd64.zip" ,
118167 SHA256SumsURL : "terraform-provider-local_2.5.1_SHA256SUMS" ,
119168 SHA256SumsSignatureURL : "terraform-provider-local_2.5.1_SHA256SUMS.72D7468F.sig" ,
120169 },
121- models.ResponseBody {
170+ expectedResolved : models.ResponseBody {
122171 DownloadURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_darwin_amd64.zip" ,
123172 SHA256SumsURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_SHA256SUMS" ,
124173 SHA256SumsSignatureURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_SHA256SUMS.72D7468F.sig" ,
125174 },
126175 },
127176 {
128- "https://somehost.com" ,
129- models.ResponseBody {
177+ baseURL : "https://somehost.com" ,
178+ body : models.ResponseBody {
130179 DownloadURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_darwin_amd64.zip" ,
131180 SHA256SumsURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_SHA256SUMS" ,
132181 SHA256SumsSignatureURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_SHA256SUMS.72D7468F.sig" ,
133182 },
134- models.ResponseBody {
183+ expectedResolved : models.ResponseBody {
135184 DownloadURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_darwin_amd64.zip" ,
136185 SHA256SumsURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_SHA256SUMS" ,
137186 SHA256SumsSignatureURL : "https://releases.hashicorp.com/terraform-provider-local/2.5.1/terraform-provider-local_2.5.1_SHA256SUMS.72D7468F.sig" ,
138187 },
139188 },
140189 {
141- "https://registry.company.com/v1/providers/ns/name/1.0/download/linux/amd64" ,
142- models.ResponseBody {
190+ baseURL : "https://registry.company.com/v1/providers/ns/name/1.0/download/linux/amd64" ,
191+ body : models.ResponseBody {
143192 DownloadURL : "/v1/providers/ns/name/1.0/download/linux/amd64/terraform-provider.zip" ,
144193 SHA256SumsURL : "/v1/providers/ns/name/1.0/download/linux/amd64/terraform-provider_SHA256SUMS" ,
145194 SHA256SumsSignatureURL : "/v1/providers/ns/name/1.0/download/linux/amd64/terraform-provider_SHA256SUMS.sig" ,
146195 },
147- models.ResponseBody {
196+ expectedResolved : models.ResponseBody {
148197 DownloadURL : "https://registry.company.com/v1/providers/ns/name/1.0/download/linux/amd64/terraform-provider.zip" ,
149198 SHA256SumsURL : "https://registry.company.com/v1/providers/ns/name/1.0/download/linux/amd64/terraform-provider_SHA256SUMS" ,
150199 SHA256SumsSignatureURL : "https://registry.company.com/v1/providers/ns/name/1.0/download/linux/amd64/terraform-provider_SHA256SUMS.sig" ,
0 commit comments