diff options
Diffstat (limited to 'src/hub/src/spreadspace.org/sfive/s5cvt_test.go')
-rw-r--r-- | src/hub/src/spreadspace.org/sfive/s5cvt_test.go | 121 |
1 files changed, 86 insertions, 35 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5cvt_test.go b/src/hub/src/spreadspace.org/sfive/s5cvt_test.go index 9e30b59..2d89485 100644 --- a/src/hub/src/spreadspace.org/sfive/s5cvt_test.go +++ b/src/hub/src/spreadspace.org/sfive/s5cvt_test.go @@ -33,67 +33,118 @@ package sfive import ( + "fmt" "reflect" "testing" "time" ) var ( - sourceIdFields = `"hostname": "localhost", "streamer-id": {"quality": "low", "content-id": "av", "format": "webm"}, "tags": ["elevate", "2014"]` - sourceIdData = `{` + sourceIdFields + `}` - sourceIdDataStruct = SourceId{Hostname: "localhost", StreamId: StreamId{Quality: "low", ContentId: "av", Format: "webm"}, Tags: []string{"elevate", "2014"}} - updateFields = `"data": {"bytes-sent": 1, "client-count": 3, "bytes-received": 1}, "start-time": "2014-08-24T14:35:33.847282Z", "duration-ms": 5000` - updateData = "{" + updateFields + "}" - updateDataStruct = DataUpdate{Data: SourceData{BytesSent: 1, ClientCount: 3, BytesReceived: 1}, StartTime: time.Date(2014, time.August, 24, 14, 35, 33, 847282000, time.UTC), Duration: 5000} - - statefulInitMsg = `{ "version": 1, ` + sourceIdFields + `}` - statefulDataMsg = `{ "version": 1, ` + updateFields + "}" - - statelessDataMsg = `{ "version": 1, ` + sourceIdFields + "," + updateFields + "}" + initDataEncoded = `"hostname": "localhost", "streamer-id": {"quality": "low", "content-id": "av", "format": "webm"}, "tags": ["elevate", "2014"]` + initDataStruct = SourceId{Hostname: "localhost", StreamId: StreamId{Quality: "low", ContentId: "av", Format: "webm"}, Tags: []string{"elevate", "2014"}} + updateDataEncoded = `"data": {"bytes-sent": 1, "client-count": 3, "bytes-received": 1}, "start-time": "2014-08-24T14:35:33.847282Z", "duration-ms": 5000` + updateDataStruct = DataUpdate{Data: SourceData{BytesSent: 1, ClientCount: 3, BytesReceived: 1}, StartTime: time.Date(2014, time.August, 24, 14, 35, 33, 847282000, time.UTC), Duration: 5000} ) -func GetExpected() *DataUpdateFull { - expected := new(DataUpdateFull) +func GetExpected() (expected DataUpdateFull) { expected.Version = ProtocolVersion - expected.CopyFromSourceId(&sourceIdDataStruct) + expected.CopyFromSourceId(&initDataStruct) expected.CopyFromUpdate(&updateDataStruct) - return expected + return } func TestDecodeStateful(t *testing.T) { - dc, err := NewStatefulDecoder([]byte(statefulInitMsg)) + // invalid init message + if _, err := NewStatefulDecoder([]byte("this is not json")); err == nil { + t.Fatalf("creating decoder with invalid json should throw an error") + } + + // wrong protocol version + wrongProtoVerMsg := fmt.Sprintf(`{ "version": %d, %s }`, ProtocolVersion+1, initDataEncoded) + if _, err := NewStatefulDecoder([]byte(wrongProtoVerMsg)); err == nil { + t.Fatalf("creating decoder with wrong protocol version should throw an error") + } + + // valid init message + statefulInitMsg := fmt.Sprintf(`{ "version": %d, %s }`, ProtocolVersion, initDataEncoded) + dec, err := NewStatefulDecoder([]byte(statefulInitMsg)) if err != nil { - t.Errorf("Creating decoder failed with %v", err) - return + t.Fatalf("creating decoder failed: %v", err) + } + + // invalid data-update message + if _, err := dec.Decode([]byte("this isn't valid json either")); err == nil { + t.Fatalf("decoding message with invalid json should throw an error") + } + + // wrong protocol version + wrongProtoVerMsg = fmt.Sprintf(`{ "version": %d, %s }`, ProtocolVersion+1, updateDataEncoded) + if _, err := dec.Decode([]byte(wrongProtoVerMsg)); err == nil { + t.Fatalf("decoding message with wrong protocol version should throw an error") } - dat, err := dc.Decode([]byte(statefulDataMsg)) + + // valid data-update message + statefulUpdateMsg := fmt.Sprintf(`{ "version": %d, %s }`, ProtocolVersion, updateDataEncoded) + decoded, err := dec.Decode([]byte(statefulUpdateMsg)) if err != nil { - t.Errorf("Decode failed with %v", err) - return + t.Fatalf("decoding message failed: %v", err) } + + // compare with expected result expected := GetExpected() - if !reflect.DeepEqual(dat, *expected) { - t.Errorf("should have been equal\nactual: %v\nexpected: %v\n", &dat, expected) + if !reflect.DeepEqual(decoded, expected) { + t.Fatalf("decoding failed:\n actual: %v\n expected: %v\n", decoded, expected) } } -func TestDecodePlain(t *testing.T) { - ec := new(PlainDecoder) - dat, err := ec.Decode([]byte(statelessDataMsg)) +func TestDecodeStateless(t *testing.T) { + dec := NewStatelessDecoder() + + // invalid message + if _, err := dec.Decode([]byte("this is still not json")); err == nil { + t.Fatalf("decoding invalid json should throw an error") + } + + // wrong protocol version + wrongProtoVerMsg := fmt.Sprintf(`{ "version": %d, %s, %s }`, ProtocolVersion+1, initDataEncoded, updateDataEncoded) + if _, err := dec.Decode([]byte(wrongProtoVerMsg)); err == nil { + t.Fatalf("decoding message with wrong protocol version should throw an error") + } + + // valid message + statelessDataMsg := fmt.Sprintf(`{ "version": %d, %s, %s }`, ProtocolVersion, initDataEncoded, updateDataEncoded) + decoded, err := dec.Decode([]byte(statelessDataMsg)) if err != nil { - t.Errorf("Decode failed with %v", err) - return + t.Fatalf("decoding message failed: %v", err) } + + // compare with expected result expected := GetExpected() - if !reflect.DeepEqual(dat, *expected) { - t.Errorf("should have been equal\nactual: %v\nexpected: %v\n", &dat, expected) + if !reflect.DeepEqual(decoded, expected) { + t.Fatalf("decoding failed:\n actual: %v\n expected: %v\n", decoded, expected) } } -func TestEncode(t *testing.T) { - ec := new(PlainEncoder) - td := new(DataUpdateFull) - td.CopyFromSourceId(&sourceIdDataStruct) +func TestEncodeStateless(t *testing.T) { + enc := NewStatelessEncoder() + + var td DataUpdateFull + td.CopyFromSourceId(&initDataStruct) td.CopyFromUpdate(&updateDataStruct) - t.Logf("dada: %v", ec.Encode(td)) + + encoded, err := enc.Encode(td) + if err != nil { + t.Fatalf("encoding message failed: %v", err) + } + + decoded, err := NewStatelessDecoder().Decode(encoded) + if err != nil { + t.Fatalf("decoding message failed: %v", err) + } + + expected := td + expected.Version = ProtocolVersion + if !reflect.DeepEqual(decoded, expected) { + t.Fatalf("Encoding failed:\n actual: %v\n expected: %v\n", decoded, expected) + } } |