Skip to content

Commit 1106e48

Browse files
committed
sevsnp tests: add unit tests
Add unit tests for endorsement, evidence and storage handlers Signed-off-by: Jagannathan Raman <[email protected]>
1 parent a2b2246 commit 1106e48

11 files changed

+580
-0
lines changed
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright 2025 Contributors to the Veraison project.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package sevsnp
4+
5+
import (
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestDecoder_GetName(t *testing.T) {
12+
d := &EndorsementHandler{}
13+
14+
expected := SchemeName
15+
16+
actual := d.GetName()
17+
18+
assert.Equal(t, expected, actual)
19+
}
20+
21+
func TestDecoder_GetAttestationScheme(t *testing.T) {
22+
d := &EndorsementHandler{}
23+
24+
expected := SchemeName
25+
26+
actual := d.GetAttestationScheme()
27+
28+
assert.Equal(t, expected, actual)
29+
}
30+
31+
func TestDecoder_GetSupportedMediaTypes(t *testing.T) {
32+
d := &EndorsementHandler{}
33+
34+
expected := EndorsementMediaTypes
35+
36+
actual := d.GetSupportedMediaTypes()
37+
38+
assert.Equal(t, expected, actual)
39+
}
40+
41+
func TestDecoder_Decode_OK(t *testing.T) {
42+
d := &EndorsementHandler{}
43+
44+
_, err := d.Decode(unsignedCorimSevSnp)
45+
assert.NoError(t, err)
46+
}
+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Copyright 2025 Contributors to the Veraison project.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package sevsnp
4+
5+
import (
6+
"encoding/json"
7+
"os"
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
"github.com/stretchr/testify/require"
12+
"github.com/veraison/ear"
13+
"github.com/veraison/services/proto"
14+
)
15+
16+
var testNonce = []byte{
17+
0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
18+
0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
19+
0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
20+
0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,
21+
}
22+
23+
func Test_ExtractClaims_ok(t *testing.T) {
24+
tokenBytes, err := os.ReadFile("test/sevsnp-token.cbor")
25+
require.NoError(t, err)
26+
27+
taEndValBytes, err := os.ReadFile("test/ta-endorsement.json")
28+
require.NoError(t, err)
29+
30+
handler := &EvidenceHandler{}
31+
32+
token := proto.AttestationToken{
33+
TenantId: "0",
34+
Data: tokenBytes,
35+
Nonce: testNonce,
36+
}
37+
ta := string(taEndValBytes)
38+
claims, err := handler.ExtractClaims(&token, []string{ta})
39+
40+
require.NoError(t, err)
41+
assert.Equal(t, "http://amd.com/2024/snp-corim-profile", claims["profile"].(string))
42+
}
43+
44+
func Test_ValidateEvidenceIntegrity_ok(t *testing.T) {
45+
tokenBytes, err := os.ReadFile("test/sevsnp-token.cbor")
46+
require.NoError(t, err)
47+
48+
taEndValBytes, err := os.ReadFile("test/ta-endorsement.json")
49+
require.NoError(t, err)
50+
51+
handler := &EvidenceHandler{}
52+
53+
token := proto.AttestationToken{
54+
TenantId: "0",
55+
Data: tokenBytes,
56+
Nonce: testNonce,
57+
}
58+
59+
ta := string(taEndValBytes)
60+
err = handler.ValidateEvidenceIntegrity(&token, []string{ta}, nil)
61+
62+
assert.NoError(t, err)
63+
}
64+
65+
func Test_ValidateEvidenceIntegrity_BadTA(t *testing.T) {
66+
tokenBytes, err := os.ReadFile("test/sevsnp-token.cbor")
67+
require.NoError(t, err)
68+
69+
taEndValBytes, err := os.ReadFile("test/ta-endorsement-bad.json")
70+
require.NoError(t, err)
71+
72+
handler := &EvidenceHandler{}
73+
74+
token := proto.AttestationToken{
75+
TenantId: "0",
76+
Data: tokenBytes,
77+
Nonce: testNonce,
78+
}
79+
80+
ta := string(taEndValBytes)
81+
err = handler.ValidateEvidenceIntegrity(&token, []string{ta}, nil)
82+
83+
assert.EqualError(t, err, "ARK in evidence does not match provisioned ARK")
84+
}
85+
86+
func Test_AppraiseEvidence_ok(t *testing.T) {
87+
extractedBytes, err := os.ReadFile("test/extracted.json")
88+
require.NoError(t, err)
89+
90+
var ec proto.EvidenceContext
91+
err = json.Unmarshal(extractedBytes, &ec)
92+
require.NoError(t, err)
93+
94+
endorsementsBytes, err := os.ReadFile("test/refval-endorsement.json")
95+
require.NoError(t, err)
96+
97+
handler := &EvidenceHandler{}
98+
99+
result, err := handler.AppraiseEvidence(&ec, []string{string(endorsementsBytes)})
100+
require.NoError(t, err)
101+
102+
attestation := result.Submods["SEVSNP"]
103+
104+
assert.Equal(t, ear.TrustTierAffirming, *attestation.Status)
105+
}

scheme/sevsnp/store_handler_test.go

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Copyright 2025 Contributors to the Veraison project.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package sevsnp
4+
5+
import (
6+
"encoding/json"
7+
"github.com/veraison/services/proto"
8+
"os"
9+
"testing"
10+
11+
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
13+
"github.com/veraison/services/handler"
14+
)
15+
16+
func Test_SynthKeysFromRefValue_ok(t *testing.T) {
17+
var e handler.Endorsement
18+
19+
endorsementsBytes, err := os.ReadFile("test/refval-endorsement.json")
20+
require.NoError(t, err)
21+
22+
err = json.Unmarshal(endorsementsBytes, &e)
23+
require.NoError(t, err)
24+
expectedKey := "SEVSNP://0/7a505b428ce2feddb2453f19c5a6d3b4b6e6cd079eacccd4de2400924cdee86b7a9285c62327536448048b977dccc4a8"
25+
26+
scheme := &StoreHandler{}
27+
keys, err := scheme.SynthKeysFromRefValue("0", &e)
28+
require.NoError(t, err)
29+
assert.Equal(t, expectedKey, keys[0])
30+
31+
}
32+
33+
func Test_SynthKeysFromTrustAnchor_ok(t *testing.T) {
34+
var e handler.Endorsement
35+
36+
endorsementsBytes, err := os.ReadFile("test/ta-endorsement.json")
37+
require.NoError(t, err)
38+
39+
err = json.Unmarshal(endorsementsBytes, &e)
40+
require.NoError(t, err)
41+
42+
expectedKey := "SEVSNP://ARK-Milan"
43+
44+
scheme := &StoreHandler{}
45+
keys, err := scheme.SynthKeysFromTrustAnchor("0", &e)
46+
require.NoError(t, err)
47+
assert.Equal(t, expectedKey, keys[0])
48+
49+
}
50+
51+
func Test_GetTrustAnchorIDs_ok(t *testing.T) {
52+
tokenBytes, err := os.ReadFile("test/sevsnp-token.cbor")
53+
require.NoError(t, err)
54+
55+
token := proto.AttestationToken{
56+
TenantId: "0",
57+
Data: tokenBytes,
58+
Nonce: testNonce,
59+
}
60+
61+
expectedTaID := "SEVSNP://ARK-Milan"
62+
63+
handler := &StoreHandler{}
64+
65+
taIDs, err := handler.GetTrustAnchorIDs(&token)
66+
require.NoError(t, err)
67+
assert.Equal(t, 1, len(taIDs))
68+
assert.Equal(t, expectedTaID, taIDs[0])
69+
}
70+
71+
func Test_GetRefValueIDs_ok(t *testing.T) {
72+
rawToken, err := os.ReadFile("test/sevsnp-token.json")
73+
require.NoError(t, err)
74+
75+
claims := make(map[string]interface{})
76+
err = json.Unmarshal(rawToken, &claims)
77+
require.NoError(t, err)
78+
79+
expectedRefvalIDs := []string{"SEVSNP://0/7a505b428ce2feddb2453f19c5a6d3b4b6e6cd079eacccd4de2400924cdee86b7a9285c62327536448048b977dccc4a8"}
80+
81+
scheme := &StoreHandler{}
82+
refvalIDs, err := scheme.GetRefValueIDs("0", nil, claims)
83+
require.NoError(t, err)
84+
assert.Equal(t, expectedRefvalIDs, refvalIDs)
85+
}
Binary file not shown.

scheme/sevsnp/test/extracted.json

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"tenant-id": "0",
3+
"trust-anchor-ids": [
4+
"SEVSNP://ARK-Milan"
5+
],
6+
"reference-ids": [
7+
"SEVSNP://0/7a505b428ce2feddb2453f19c5a6d3b4b6e6cd079eacccd4de2400924cdee86b7a9285c62327536448048b977dccc4a8"
8+
],
9+
"evidence": {
10+
"corim-id": "unknown type for tag-id",
11+
"profile": "http://amd.com/2024/snp-corim-profile",
12+
"tags": [
13+
"2QH6owBlZW4tR0IBoQBQID5rEAv7TbOnMFdvpjTnDAShAIGCogChANhvSSsGAQQBnHgDAQHZAjBYQMKmUotzZOB+n1xlOrOqDb1zhPmoDf3lTMZD3buJ2JNkJf+KMlaMpu13ECDcOcM8z/s7Q8rAxQGgCTytYBLf0+2VogAAAaEAogBhMwEEogABAaEB2QIpAKIAAgGhBNkCMEgAAAAAAAMAAKIAAwGhBNkCMFAAAAAAAAAAAAAAAAAAAAAAogAEAaEE2QIwUAAAAAAAAAAAAAAAAAAAAACiAAUBoQTZAjBEAAAAAKIABgGhAdkCKBvbGAAAAAAABKIABwGhBNkCMEgAAAAAAAAAJaIAGQKAAaEE2QIwWEB1GEqFFca9sVESgVS/smsUbXNIigXFjWwRffBdyN5+s1gXYPHYA5nvNf1j4pAgYY4CR5YdjjZHeo9aObAp7qB1ogAZAoEBoQKBggdYMHpQW0KM4v7dskU/GcWm07S25s0HnqzM1N4kAJJM3uhrepKFxiMnU2RIBIuXfczEqKIAGQKFAaEE2QIwWCD/5zoLo3n7Jeq7bC+3UBuZpm6s+Sv3raCnVqOxZCtc5KIAGQKGAaEE2QIwWCD//////////////////////////////////////////6IAGQKHAaEB2QIoG9sYAAAAAAAEogAZAogBoQTZAjBBGaIAGQKJAaEE2QIwQQGiABkCigGhBNkCMEEBogAZDQABoQTZAjBYQMKmUotzZOB+n1xlOrOqDb1zhPmoDf3lTMZD3buJ2JNkJf+KMlaMpu13ECDcOcM8z/s7Q8rAxQGgCTytYBLf0+2iABkNAQGhAdkCKBvbGAAAAAAABKIAGQ0CAaEAogBnMS41NS4yOQEZQACiABkPYAGhAKIAZzEuNTUuMjkBGUAAogAZD4ABoQHZAigb2xgAAAAAAAQ="
14+
]
15+
}
16+
}

0 commit comments

Comments
 (0)