2023-01-18 10:49:55 -05:00
|
|
|
/*
|
|
|
|
Copyright (c) Edgeless Systems GmbH
|
|
|
|
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
*/
|
|
|
|
|
|
|
|
package idkeydigest
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestMarshal(t *testing.T) {
|
|
|
|
testCases := map[string]struct {
|
|
|
|
dgst IDKeyDigests
|
|
|
|
wantYAML string
|
|
|
|
wantJSON string
|
|
|
|
}{
|
|
|
|
"digest": {
|
|
|
|
dgst: IDKeyDigests{{0x01, 0x02, 0x03, 0x04}, {0xff, 0xff, 0xff, 0xff}},
|
|
|
|
wantJSON: `["01020304","ffffffff"]`,
|
|
|
|
wantYAML: `
|
|
|
|
- "01020304"
|
|
|
|
- "ffffffff"`,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for name, tc := range testCases {
|
|
|
|
t.Run(name, func(t *testing.T) {
|
|
|
|
assert := assert.New(t)
|
|
|
|
require := require.New(t)
|
|
|
|
|
|
|
|
{
|
|
|
|
// YAML
|
|
|
|
yaml, err := yaml.Marshal(tc.dgst)
|
|
|
|
require.NoError(err)
|
|
|
|
|
|
|
|
assert.YAMLEq(tc.wantYAML, string(yaml))
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
// JSON
|
|
|
|
json, err := json.Marshal(tc.dgst)
|
|
|
|
require.NoError(err)
|
|
|
|
|
|
|
|
assert.JSONEq(tc.wantJSON, string(json))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestUnmarshal(t *testing.T) {
|
|
|
|
testCases := map[string]struct {
|
|
|
|
yaml string
|
|
|
|
json string
|
|
|
|
wantDgst IDKeyDigests
|
|
|
|
wantErr bool
|
|
|
|
}{
|
|
|
|
"digest struct": {
|
|
|
|
json: `["57486a447ec0f1958002a22a06b7673b9fd27d11e1c6527498056054c5fa92d23c50f9de44072760fe2b6fb89740b696","0356215882a825279a85b300b0b742931d113bf7e32dde2e50ffde7ec743ca491ecdd7f336dc28a6e0b2bb57af7a44a3"]`,
|
|
|
|
yaml: `
|
|
|
|
- "57486a447ec0f1958002a22a06b7673b9fd27d11e1c6527498056054c5fa92d23c50f9de44072760fe2b6fb89740b696"
|
|
|
|
- "0356215882a825279a85b300b0b742931d113bf7e32dde2e50ffde7ec743ca491ecdd7f336dc28a6e0b2bb57af7a44a3"`,
|
|
|
|
wantDgst: IDKeyDigests{
|
|
|
|
{0x57, 0x48, 0x6a, 0x44, 0x7e, 0xc0, 0xf1, 0x95, 0x80, 0x02, 0xa2, 0x2a, 0x06, 0xb7, 0x67, 0x3b, 0x9f, 0xd2, 0x7d, 0x11, 0xe1, 0xc6, 0x52, 0x74, 0x98, 0x05, 0x60, 0x54, 0xc5, 0xfa, 0x92, 0xd2, 0x3c, 0x50, 0xf9, 0xde, 0x44, 0x07, 0x27, 0x60, 0xfe, 0x2b, 0x6f, 0xb8, 0x97, 0x40, 0xb6, 0x96},
|
|
|
|
{0x03, 0x56, 0x21, 0x58, 0x82, 0xa8, 0x25, 0x27, 0x9a, 0x85, 0xb3, 0x00, 0xb0, 0xb7, 0x42, 0x93, 0x1d, 0x11, 0x3b, 0xf7, 0xe3, 0x2d, 0xde, 0x2e, 0x50, 0xff, 0xde, 0x7e, 0xc7, 0x43, 0xca, 0x49, 0x1e, 0xcd, 0xd7, 0xf3, 0x36, 0xdc, 0x28, 0xa6, 0xe0, 0xb2, 0xbb, 0x57, 0xaf, 0x7a, 0x44, 0xa3},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"legacy digest as string": {
|
|
|
|
json: `"57486a447ec0f1958002a22a06b7673b9fd27d11e1c6527498056054c5fa92d23c50f9de44072760fe2b6fb89740b696"`,
|
|
|
|
yaml: `"57486a447ec0f1958002a22a06b7673b9fd27d11e1c6527498056054c5fa92d23c50f9de44072760fe2b6fb89740b696"`,
|
|
|
|
wantDgst: IDKeyDigests{{0x57, 0x48, 0x6a, 0x44, 0x7e, 0xc0, 0xf1, 0x95, 0x80, 0x02, 0xa2, 0x2a, 0x06, 0xb7, 0x67, 0x3b, 0x9f, 0xd2, 0x7d, 0x11, 0xe1, 0xc6, 0x52, 0x74, 0x98, 0x05, 0x60, 0x54, 0xc5, 0xfa, 0x92, 0xd2, 0x3c, 0x50, 0xf9, 0xde, 0x44, 0x07, 0x27, 0x60, 0xfe, 0x2b, 0x6f, 0xb8, 0x97, 0x40, 0xb6, 0x96}},
|
|
|
|
},
|
|
|
|
"invalid length": {
|
|
|
|
json: `"010203"`,
|
|
|
|
yaml: `"010203"`,
|
|
|
|
wantDgst: IDKeyDigests{{}},
|
|
|
|
wantErr: true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for name, tc := range testCases {
|
|
|
|
t.Run(name, func(t *testing.T) {
|
|
|
|
assert := assert.New(t)
|
|
|
|
require := require.New(t)
|
|
|
|
|
|
|
|
{
|
|
|
|
// YAML
|
|
|
|
var dgst IDKeyDigests
|
|
|
|
err := yaml.Unmarshal([]byte(tc.yaml), &dgst)
|
|
|
|
if tc.wantErr {
|
|
|
|
require.Error(err)
|
|
|
|
} else {
|
|
|
|
require.NoError(err)
|
|
|
|
|
|
|
|
assert.Equal(tc.wantDgst, dgst)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
// JSON
|
|
|
|
var dgst IDKeyDigests
|
|
|
|
err := json.Unmarshal([]byte(tc.json), &dgst)
|
|
|
|
if tc.wantErr {
|
|
|
|
require.Error(err)
|
|
|
|
} else {
|
|
|
|
require.NoError(err)
|
|
|
|
|
|
|
|
assert.Equal(tc.wantDgst, dgst)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
2023-03-21 07:46:49 -04:00
|
|
|
|
|
|
|
func TestEnforceIDKeyDigestMarshal(t *testing.T) {
|
|
|
|
testCases := map[string]struct {
|
|
|
|
input EnforceIDKeyDigest
|
|
|
|
wantJSON string
|
|
|
|
wantYAML string
|
|
|
|
}{
|
|
|
|
"strict": {
|
|
|
|
input: StrictChecking,
|
|
|
|
wantJSON: `"StrictChecking"`,
|
|
|
|
wantYAML: "StrictChecking",
|
|
|
|
},
|
|
|
|
"maaFallback": {
|
|
|
|
input: MAAFallback,
|
|
|
|
wantJSON: `"MAAFallback"`,
|
|
|
|
wantYAML: "MAAFallback",
|
|
|
|
},
|
|
|
|
"warnOnly": {
|
|
|
|
input: WarnOnly,
|
|
|
|
wantJSON: `"WarnOnly"`,
|
|
|
|
wantYAML: "WarnOnly",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for name, tc := range testCases {
|
|
|
|
t.Run(name, func(t *testing.T) {
|
|
|
|
assert := assert.New(t)
|
|
|
|
require := require.New(t)
|
|
|
|
|
|
|
|
{
|
|
|
|
// YAML
|
|
|
|
yaml, err := yaml.Marshal(tc.input)
|
|
|
|
require.NoError(err)
|
|
|
|
assert.YAMLEq(tc.wantYAML, string(yaml))
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
// JSON
|
|
|
|
json, err := json.Marshal(tc.input)
|
|
|
|
require.NoError(err)
|
|
|
|
assert.JSONEq(tc.wantJSON, string(json))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEnforceIDKeyDigestUnmarshal(t *testing.T) {
|
|
|
|
testCases := map[string]struct {
|
|
|
|
inputJSON string
|
|
|
|
inputYAML string
|
|
|
|
want EnforceIDKeyDigest
|
|
|
|
wantErr bool
|
|
|
|
}{
|
|
|
|
"strict": {
|
|
|
|
inputJSON: `"StrictChecking"`,
|
|
|
|
inputYAML: "StrictChecking",
|
|
|
|
want: StrictChecking,
|
|
|
|
},
|
|
|
|
"maaFallback": {
|
|
|
|
inputJSON: `"MAAFallback"`,
|
|
|
|
inputYAML: "MAAFallback",
|
|
|
|
want: MAAFallback,
|
|
|
|
},
|
|
|
|
"warnOnly": {
|
|
|
|
inputJSON: `"WarnOnly"`,
|
|
|
|
inputYAML: "WarnOnly",
|
|
|
|
want: WarnOnly,
|
|
|
|
},
|
|
|
|
"legacyTrue": {
|
|
|
|
inputJSON: `true`,
|
|
|
|
inputYAML: "true",
|
|
|
|
want: StrictChecking,
|
|
|
|
},
|
|
|
|
"legacyFalse": {
|
|
|
|
inputJSON: `false`,
|
|
|
|
inputYAML: "false",
|
|
|
|
want: WarnOnly,
|
|
|
|
},
|
|
|
|
"invalid": {
|
|
|
|
inputJSON: `"invalid"`,
|
|
|
|
inputYAML: "invalid",
|
|
|
|
wantErr: true,
|
|
|
|
},
|
|
|
|
"invalidType": {
|
|
|
|
inputJSON: `{"object": "invalid"}`,
|
|
|
|
inputYAML: "object: invalid",
|
|
|
|
wantErr: true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for name, tc := range testCases {
|
|
|
|
t.Run(name, func(t *testing.T) {
|
|
|
|
assert := assert.New(t)
|
|
|
|
require := require.New(t)
|
|
|
|
|
|
|
|
{
|
|
|
|
// YAML
|
|
|
|
var got EnforceIDKeyDigest
|
|
|
|
err := yaml.Unmarshal([]byte(tc.inputYAML), &got)
|
|
|
|
if tc.wantErr {
|
|
|
|
assert.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
require.NoError(err)
|
|
|
|
assert.Equal(tc.want, got)
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
// JSON
|
|
|
|
var got EnforceIDKeyDigest
|
|
|
|
err := json.Unmarshal([]byte(tc.inputJSON), &got)
|
|
|
|
if tc.wantErr {
|
|
|
|
assert.Error(err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
require.NoError(err)
|
|
|
|
assert.Equal(tc.want, got)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|