@@ -30,37 +30,69 @@ Content-Digest: sha-256=:Wqdirjg/u3J688ejbUlApbjECpiUUtIwT8lY/z81Tno=:
3030var resdigest5 = `HTTP/1.1 206 Partial Content
3131Content-Type: application/json
3232Content-Range: bytes 1-7/18
33- Content-Digest: sha-512=:A8pplr4vsk4xdLkJruCXWp6+i+dy/3pSW5HW5ke1jDWS70Dv6Fstf1jS+XEcLqEVhW3i925IPlf/4tnpnvAQDw==:
33+ Content-Digest: sha-256=:Wqdirjg/u3J688ejbUlApbjECpiUUtIwT8lY/z81Tno=:, sha- 512=:A8pplr4vsk4xdLkJruCXWp6+i+dy/3pSW5HW5ke1jDWS70Dv6Fstf1jS+XEcLqEVhW3i925IPlf/4tnpnvAQDw==:
3434
3535"hello"`
3636
37+ var resdigest6 = `HTTP/1.1 200 OK
38+ Content-Type: application/json
39+ Content-Digest: sha-256=:X47E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:
40+
41+ {"hello": "world"}`
42+
3743func TestMessages (t * testing.T ) {
3844 res1 := readResponse (resdigest1 )
39- d , err := GenerateContentDigest (& res1 .Body , DigestSha256 )
45+ d , err := GenerateContentDigestHeader (& res1 .Body , [] string { DigestSha256 } )
4046 assert .NoError (t , err , "should not fail to generate digest" )
4147 assert .Equal (t , "sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:" , d )
4248 h := res1 .Header .Get ("Content-Digest" )
4349 assert .Equal (t , h , d )
4450
4551 res2 := readResponse (resdigest2 )
46- d , err = GenerateContentDigest (& res2 .Body , DigestSha256 )
52+ d , err = GenerateContentDigestHeader (& res2 .Body , [] string { DigestSha256 } )
4753 assert .NoError (t , err , "should not fail to generate digest" )
4854 h = res2 .Header .Get ("Content-Digest" )
4955 assert .Equal (t , h , d )
5056
5157 res3 := readResponse (resdigest3 )
52- d , err = GenerateContentDigest (& res3 .Body , DigestSha256 )
58+ d , err = GenerateContentDigestHeader (& res3 .Body , [] string { DigestSha256 } )
5359 assert .NoError (t , err , "should not fail to generate digest" )
5460 h = res3 .Header .Get ("Content-Digest" )
5561 assert .NotEqual (t , h , d )
5662
5763 res4 := readResponse (resdigest3 )
58- d , err = GenerateContentDigest (& res4 .Body , "sha-999" )
64+ d , err = GenerateContentDigestHeader (& res4 .Body , [] string { DigestSha256 , "sha-999" } )
5965 assert .Error (t , err , "bad digest scheme" )
6066
6167 res5 := readResponse (resdigest5 )
62- d , err = GenerateContentDigest (& res5 .Body , DigestSha512 )
68+ d , err = GenerateContentDigestHeader (& res5 .Body , [] string { DigestSha256 , DigestSha512 } )
6369 assert .NoError (t , err , "should not fail to generate digest" )
6470 h = res5 .Header .Get ("Content-Digest" )
6571 assert .Equal (t , h , d )
6672}
73+
74+ func TestValidateContentDigestHeader (t * testing.T ) {
75+ res1 := readResponse (resdigest1 )
76+ hdr := res1 .Header .Values ("Content-Digest" )
77+ err := ValidateContentDigestHeader (hdr , & res1 .Body , []string {DigestSha256 })
78+ assert .NoError (t , err , "should not fail" )
79+
80+ err = ValidateContentDigestHeader (hdr , & res1 .Body , []string {})
81+ assert .Error (t , err , "empty list of accepted schemes" )
82+
83+ err = ValidateContentDigestHeader (hdr , & res1 .Body , []string {"kuku" })
84+ assert .Error (t , err , "unknown scheme in list of accepted schemes" )
85+
86+ hdr = []string {"123" }
87+ err = ValidateContentDigestHeader (hdr , & res1 .Body , []string {DigestSha256 })
88+ assert .Error (t , err , "bad received header" )
89+
90+ hdr = res1 .Header .Values ("Content-Digest" )
91+ err = ValidateContentDigestHeader (hdr , & res1 .Body , []string {DigestSha512 })
92+ assert .Error (t , err , "no acceptable scheme" )
93+
94+ res6 := readResponse (resdigest6 )
95+ hdr = res6 .Header .Values ("Content-Digest" )
96+ err = ValidateContentDigestHeader (hdr , & res6 .Body , []string {DigestSha256 })
97+ assert .Error (t , err , "digest mismatch" )
98+ }
0 commit comments