Skip to content

Commit 8571a77

Browse files
feat(coserv)!: update code to match draft-03
Update implementation to match the query layout defined in draft-ietf-rats-coserv-03. BREAKING CHANGE: The query object has been reorganised as follows: * The timestamp attribute (codepoint 2) has been removed. * Codepoint 2 has been reused for the result-type attribute. * Codepoint 3 is no longer used. Signed-off-by: Thomas Fossati <thomas.fossati@linaro.org>
1 parent 1ceb39c commit 8571a77

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+57
-108
lines changed

coserv/coserv_test.go

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ func TestCoserv_ToCBOR_rv_class_simple(t *testing.T) {
2727
query, err := NewQuery(ArtifactTypeReferenceValues, *envSelector, ResultTypeSourceArtifacts)
2828
require.NoError(t, err)
2929

30-
// overwrite the default query timestamp
31-
query.SetTimestamp(testTimestamp)
32-
3330
tv, err := NewCoserv(
3431
`tag:example.com,2025:cc-platform#1.0.0`,
3532
*query,
@@ -47,9 +44,6 @@ func TestCoserv_ToCBOR_exampleClassSelector(t *testing.T) {
4744
query, err := NewQuery(ArtifactTypeReferenceValues, *exampleClassSelector(t), ResultTypeCollectedArtifacts)
4845
require.NoError(t, err)
4946

50-
// overwrite the default query timestamp
51-
query.SetTimestamp(testTimestamp)
52-
5347
tv, err := NewCoserv(
5448
`tag:example.com,2025:cc-platform#1.0.0`,
5549
*query,
@@ -71,9 +65,6 @@ func TestCoserv_ToCBOR_exampleInstanceSelector(t *testing.T) {
7165
query, err := NewQuery(ArtifactTypeReferenceValues, *exampleInstanceSelector(t), ResultTypeBoth)
7266
require.NoError(t, err)
7367

74-
// overwrite the default query timestamp
75-
query.SetTimestamp(testTimestamp)
76-
7768
tv, err := NewCoserv(
7869
`tag:example.com,2025:cc-platform#1.0.0`,
7970
*query,
@@ -91,9 +82,6 @@ func TestCoserv_ToCBOR_exampleGroupSelector(t *testing.T) {
9182
query, err := NewQuery(ArtifactTypeReferenceValues, *exampleGroupSelector(t), ResultTypeSourceArtifacts)
9283
require.NoError(t, err)
9384

94-
// overwrite the default query timestamp
95-
query.SetTimestamp(testTimestamp)
96-
9785
tv, err := NewCoserv(
9886
`tag:example.com,2025:cc-platform#1.0.0`,
9987
*query,
@@ -129,7 +117,6 @@ func TestCoserv_FromBase64Url_ok_class(t *testing.T) {
129117
require.NoError(t, err)
130118
assert.Equal(t, `tag:example.com,2025:cc-platform#1.0.0`, actualProfile)
131119
assert.Equal(t, "reference-values", actual.Query.ArtifactType.String())
132-
assert.Equal(t, testTimestamp, actual.Query.Timestamp)
133120
assert.Equal(t, "collected-artifacts", actual.Query.ResultType.String())
134121
assert.Equal(t, *exampleClassSelector(t), actual.Query.EnvironmentSelector)
135122
}
@@ -146,7 +133,6 @@ func TestCoserv_FromBase64Url_ok_instance(t *testing.T) {
146133
require.NoError(t, err)
147134
assert.Equal(t, `tag:example.com,2025:cc-platform#1.0.0`, actualProfile)
148135
assert.Equal(t, "reference-values", actual.Query.ArtifactType.String())
149-
assert.Equal(t, testTimestamp, actual.Query.Timestamp)
150136
assert.Equal(t, "both", actual.Query.ResultType.String())
151137
assert.Equal(t, *exampleInstanceSelector(t), actual.Query.EnvironmentSelector)
152138
}
@@ -163,7 +149,6 @@ func TestCoserv_FromBase64Url_ok_group(t *testing.T) {
163149
require.NoError(t, err)
164150
assert.Equal(t, `tag:example.com,2025:cc-platform#1.0.0`, actualProfile)
165151
assert.Equal(t, "reference-values", actual.Query.ArtifactType.String())
166-
assert.Equal(t, testTimestamp, actual.Query.Timestamp)
167152
assert.Equal(t, "source-artifacts", actual.Query.ResultType.String())
168153
assert.Equal(t, *exampleGroupSelector(t), actual.Query.EnvironmentSelector)
169154
}
@@ -181,9 +166,6 @@ func TestCoserv_ToBase64Url_ok_instance(t *testing.T) {
181166
query, err := NewQuery(ArtifactTypeReferenceValues, *exampleInstanceSelector(t), ResultTypeBoth)
182167
require.NoError(t, err)
183168

184-
// overwrite the default query timestamp
185-
query.SetTimestamp(testTimestamp)
186-
187169
tv, err := NewCoserv(
188170
`tag:example.com,2025:cc-platform#1.0.0`,
189171
*query,
@@ -204,9 +186,6 @@ func TestCoserv_ToBase64Url_ok_class(t *testing.T) {
204186
query, err := NewQuery(ArtifactTypeReferenceValues, *exampleClassSelector(t), ResultTypeCollectedArtifacts)
205187
require.NoError(t, err)
206188

207-
// overwrite the default query timestamp
208-
query.SetTimestamp(testTimestamp)
209-
210189
tv, err := NewCoserv(
211190
`tag:example.com,2025:cc-platform#1.0.0`,
212191
*query,
@@ -227,9 +206,6 @@ func TestCoserv_ToBase64Url_ok_group(t *testing.T) {
227206
query, err := NewQuery(ArtifactTypeReferenceValues, *exampleGroupSelector(t), ResultTypeSourceArtifacts)
228207
require.NoError(t, err)
229208

230-
// overwrite the default query timestamp
231-
query.SetTimestamp(testTimestamp)
232-
233209
tv, err := NewCoserv(
234210
`tag:example.com,2025:cc-platform#1.0.0`,
235211
*query,
@@ -250,9 +226,6 @@ func TestCoserv_ToEDN_ok(t *testing.T) {
250226
query, err := NewQuery(ArtifactTypeReferenceValues, *exampleClassSelector(t), ResultTypeCollectedArtifacts)
251227
require.NoError(t, err)
252228

253-
// overwrite the default query timestamp
254-
query.SetTimestamp(testTimestamp)
255-
256229
tv, err := NewCoserv(
257230
`tag:example.com,2025:cc-platform#1.0.0`,
258231
*query,
@@ -292,7 +265,6 @@ func TestCoserv_FromCBOR_Results(t *testing.T) {
292265
require.NoError(t, err)
293266
assert.Equal(t, `tag:example.com,2025:cc-platform#1.0.0`, actualProfile)
294267
assert.Equal(t, "reference-values", actual.Query.ArtifactType.String())
295-
assert.Equal(t, testTimestamp, actual.Query.Timestamp)
296268
assert.Equal(t, *exampleClassSelector2(t), actual.Query.EnvironmentSelector)
297269

298270
// results-related assertions
@@ -376,9 +348,6 @@ func TestCoserv_results_ToCBOR_ok(t *testing.T) {
376348
query, err := NewQuery(ArtifactTypeReferenceValues, *envSelector, ResultTypeCollectedArtifacts)
377349
require.NoError(t, err)
378350

379-
// overwrite the default query timestamp
380-
query.SetTimestamp(testTimestamp)
381-
382351
tv, err := NewCoserv(
383352
`tag:example.com,2025:cc-platform#1.0.0`,
384353
*query,

coserv/environmentselector_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ func TestEnvironmentSelector_Valid_mixed_fail(t *testing.T) {
1717
assert.EqualError(t, err, "only one selector type is allowed")
1818
}
1919

20+
func TestEnvironmentSelector_Valid_mixed_fail_alt(t *testing.T) {
21+
tv := badExampleMixedSelectorAlt(t)
22+
23+
err := tv.Valid()
24+
assert.EqualError(t, err, "only one selector type is allowed")
25+
}
26+
2027
func TestEnvironmentSelector_Valid_empty_fail(t *testing.T) {
2128
tv := badExampleEmptySelector(t)
2229

coserv/query.go

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,16 @@ package coserv
55

66
import (
77
"fmt"
8-
"time"
98
)
109

1110
// Query is the internal representation of a Query data item
1211
type Query struct {
1312
ArtifactType ArtifactType `cbor:"0,keyasint"`
1413
EnvironmentSelector EnvironmentSelector `cbor:"1,keyasint"`
15-
Timestamp time.Time `cbor:"2,keyasint"`
16-
ResultType ResultType `cbor:"3,keyasint"`
14+
ResultType ResultType `cbor:"2,keyasint"`
1715
}
1816

19-
// NewQuery creates a new Query instance with the timestamp set to instantiation time.
20-
// (If needed, the timestamp can be changed using SetTimestamp.)
17+
// NewQuery creates a new Query instance.
2118
// An error is returned if the supplied environment selector is invalid.
2219
func NewQuery(
2320
artifactType ArtifactType,
@@ -31,17 +28,10 @@ func NewQuery(
3128
return &Query{
3229
ArtifactType: artifactType,
3330
EnvironmentSelector: envSelector,
34-
Timestamp: time.Now(),
3531
ResultType: resultType,
3632
}, nil
3733
}
3834

39-
// SetTimestamp allows setting an explicit timestamp for the target Query object
40-
func (o *Query) SetTimestamp(ts time.Time) *Query {
41-
o.Timestamp = ts
42-
return o
43-
}
44-
4535
// Valid ensures that the Query target is correctly populated
4636
func (o Query) Valid() error {
4737
// TODO(tho) add tests for these two:
@@ -52,10 +42,5 @@ func (o Query) Valid() error {
5242
return fmt.Errorf("invalid environment selector: %w", err)
5343
}
5444

55-
zeroTime := time.Time{}
56-
if o.Timestamp.Equal(zeroTime) {
57-
return fmt.Errorf("timestamp not set")
58-
}
59-
6045
return nil
6146
}

coserv/query_test.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@ package coserv
55

66
import (
77
"testing"
8-
"time"
98

109
"github.com/stretchr/testify/assert"
11-
"github.com/stretchr/testify/require"
1210
)
1311

1412
func TestQuery_Valid_empty_query(t *testing.T) {
@@ -21,14 +19,8 @@ func TestQuery_Valid_empty_query(t *testing.T) {
2119
assert.EqualError(t, actual, expected)
2220
}
2321

24-
func TestQuery_Valid_invalid_timestamp(t *testing.T) {
25-
tv := exampleClassQuery(t)
26-
27-
require.NotNil(t, tv.SetTimestamp(time.Time{}))
28-
29-
actual := tv.Valid()
30-
31-
expected := "timestamp not set"
32-
33-
assert.EqualError(t, actual, expected)
22+
func TestQuery_NewQuery_invalid_selector(t *testing.T) {
23+
actual, err := NewQuery(ArtifactTypeEndorsedValues, *NewEnvironmentSelector(), ResultTypeBoth)
24+
assert.Nil(t, actual)
25+
assert.EqualError(t, err, "invalid environment selector: non-empty<> constraint violation")
3426
}

coserv/test_common.go

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@ import (
2323
)
2424

2525
var (
26-
testExpiry, _ = time.Parse("2006-01-02T15:04:05Z", "2030-12-13T18:30:02Z")
27-
testTimestamp, _ = time.Parse("2006-01-02T15:04:05Z", "2030-12-01T18:30:01Z")
28-
testAuthority = []byte{0xab, 0xcd, 0xef}
29-
testBytes = []byte{0x00, 0x11, 0x22, 0x33}
30-
testES256Key = []byte(`{
26+
testExpiry, _ = time.Parse("2006-01-02T15:04:05Z", "2030-12-13T18:30:02Z")
27+
testAuthority = []byte{0xab, 0xcd, 0xef}
28+
testBytes = []byte{0x00, 0x11, 0x22, 0x33}
29+
testES256Key = []byte(`{
3130
"kty": "EC",
3231
"crv": "P-256",
3332
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
@@ -115,13 +114,24 @@ func badExampleMixedSelector(t *testing.T) *EnvironmentSelector {
115114
instance0, err := comid.NewUEIDInstance(comid.TestUEID)
116115
require.NoError(t, err)
117116

117+
selector := NewEnvironmentSelector().
118+
AddGroup(StatefulGroup{Group: group0}).
119+
AddInstance(StatefulInstance{Instance: instance0})
120+
require.NotNil(t, selector)
121+
122+
return selector
123+
}
124+
125+
func badExampleMixedSelectorAlt(t *testing.T) *EnvironmentSelector {
126+
instance0, err := comid.NewUEIDInstance(comid.TestUEID)
127+
require.NoError(t, err)
128+
118129
class0 := comid.NewClassUUID(comid.TestUUID)
119130
require.NotNil(t, class0)
120131

121132
selector := NewEnvironmentSelector().
122-
AddGroup(StatefulGroup{Group: group0}).
123133
AddInstance(StatefulInstance{Instance: instance0}).
124-
AddGroup(StatefulGroup{Group: group0})
134+
AddClass(StatefulClass{Class: class0})
125135
require.NotNil(t, selector)
126136

127137
return selector
@@ -133,12 +143,6 @@ func badExampleEmptySelector(t *testing.T) *EnvironmentSelector {
133143
return es
134144
}
135145

136-
func exampleClassQuery(t *testing.T) *Query {
137-
qry, err := NewQuery(ArtifactTypeReferenceValues, *exampleClassSelector(t), ResultTypeCollectedArtifacts)
138-
require.NoError(t, err)
139-
return qry
140-
}
141-
142146
func exampleReferenceValuesResultSet(t *testing.T) *ResultSet {
143147
env := comid.Environment{
144148
Class: comid.NewClassBytes(comid.TestBytes),
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ogB4JnRhZzpleGFtcGxlLmNvbSwyMDI1OmNjLXBsYXRmb3JtIzEuMC4wAaQAAgGhAIKBowDZAjBEABEiMwFuRXhhbXBsZSBWZW5kb3ICbUV4YW1wbGUgTW9kZWyBoQDYJVAx-1q_Aj5JkqpOlfnBUDv6AsB0MjAzMC0xMi0wMVQxODozMDowMVoDAA
1+
ogB4JnRhZzpleGFtcGxlLmNvbSwyMDI1OmNjLXBsYXRmb3JtIzEuMC4wAaMAAgGhAIKBowDZAjBEABEiMwFuRXhhbXBsZSBWZW5kb3ICbUV4YW1wbGUgTW9kZWyBoQDYJVAx-1q_Aj5JkqpOlfnBUDv6AgA
-23 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{0: "tag:example.com,2025:cc-platform#1.0.0", 1: {0: 2, 1: {0: [[{0: 560(h'00112233'), 1: "Example Vendor", 2: "Example Model"}], [{0: 37(h'31fb5abf023e4992aa4e95f9c1503bfa')}]]}, 2: 0("2030-12-01T18:30:01Z"), 3: 0}}
1+
{0: "tag:example.com,2025:cc-platform#1.0.0", 1: {0: 2, 1: {0: [[{0: 560(h'00112233'), 1: "Example Vendor", 2: "Example Model"}], [{0: 37(h'31fb5abf023e4992aa4e95f9c1503bfa')}]]}, 2: 0}}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
a20078267461673a6578616d706c652e636f6d2c323032353a63632d706c6174666f726d23312e302e3001a4000201a1008281a300d902304400112233016e4578616d706c652056656e646f72026d4578616d706c65204d6f64656c81a100d8255031fb5abf023e4992aa4e95f9c1503bfa02c074323033302d31322d30315431383a33303a30315a0300
1+
a20078267461673a6578616d706c652e636f6d2c323032353a63632d706c6174666f726d23312e302e3001a3000201a1008281a300d902304400112233016e4578616d706c652056656e646f72026d4578616d706c65204d6f64656c81a100d8255031fb5abf023e4992aa4e95f9c1503bfa0200
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ogB4JnRhZzpleGFtcGxlLmNvbSwyMDI1OmNjLXBsYXRmb3JtIzEuMC4wAaQAAgGhAIKBowDZAjBEABEiMwFuRXhhbXBsZSBWZW5kb3ICbUV4YW1wbGUgTW9kZWyBoQDYJVAx-1q_Aj5JkqpOlfnBUDv6AsB0MjAzMC0xMi0wMVQxODozMDowMVoDAA
1+
ogB4JnRhZzpleGFtcGxlLmNvbSwyMDI1OmNjLXBsYXRmb3JtIzEuMC4wAaMAAgGhAIKBowDZAjBEABEiMwFuRXhhbXBsZSBWZW5kb3ICbUV4YW1wbGUgTW9kZWyBoQDYJVAx-1q_Aj5JkqpOlfnBUDv6AgA

0 commit comments

Comments
 (0)