chore: import upstream snapshot with attribution
govulncheck / govulncheck (push) Has been cancelled
Lint / golangci-lint (push) Has been cancelled
Run Tests / Unit Tests (push) Has been cancelled
Run Tests / Etcd Integration Tests (push) Has been cancelled
Harness (E2E) / Harnesses (mock LLM) (push) Has been cancelled
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Has been cancelled
govulncheck / govulncheck (push) Has been cancelled
Lint / golangci-lint (push) Has been cancelled
Run Tests / Unit Tests (push) Has been cancelled
Run Tests / Etcd Integration Tests (push) Has been cancelled
Harness (E2E) / Harnesses (mock LLM) (push) Has been cancelled
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
package json
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"go-micro.dev/v6/codec"
|
||||
"google.golang.org/protobuf/types/known/anypb"
|
||||
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||
)
|
||||
|
||||
// mockReadWriteCloser implements io.ReadWriteCloser for testing
|
||||
type mockReadWriteCloser struct {
|
||||
*bytes.Buffer
|
||||
}
|
||||
|
||||
func (m *mockReadWriteCloser) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// TestCodecAnyTypeWrite tests that google.protobuf.Any types are properly written with @type field
|
||||
func TestCodecAnyTypeWrite(t *testing.T) {
|
||||
buf := &mockReadWriteCloser{Buffer: bytes.NewBuffer(nil)}
|
||||
c := NewCodec(buf).(*Codec)
|
||||
|
||||
// Create a StringValue message
|
||||
stringValue := wrapperspb.String("test value")
|
||||
|
||||
// Wrap it in an Any message
|
||||
anyMsg, err := anypb.New(stringValue)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create Any message: %v", err)
|
||||
}
|
||||
|
||||
// Write the message
|
||||
msg := &codec.Message{
|
||||
Type: codec.Response,
|
||||
}
|
||||
if err := c.Write(msg, anyMsg); err != nil {
|
||||
t.Fatalf("Failed to write Any message: %v", err)
|
||||
}
|
||||
|
||||
// Parse the written JSON
|
||||
var result map[string]interface{}
|
||||
if err := json.Unmarshal(buf.Bytes(), &result); err != nil {
|
||||
t.Fatalf("Failed to unmarshal JSON: %v", err)
|
||||
}
|
||||
|
||||
// Check that @type field exists
|
||||
typeURL, ok := result["@type"].(string)
|
||||
if !ok {
|
||||
t.Fatalf("@type field not found in JSON output. Got: %v", buf.String())
|
||||
}
|
||||
|
||||
// Verify the type URL is correct
|
||||
expectedTypeURL := "type.googleapis.com/google.protobuf.StringValue"
|
||||
if typeURL != expectedTypeURL {
|
||||
t.Errorf("Expected @type to be %s, got %s", expectedTypeURL, typeURL)
|
||||
}
|
||||
|
||||
t.Logf("Successfully wrote Any type with @type field: %s", buf.String())
|
||||
}
|
||||
|
||||
// TestCodecAnyTypeRead tests that JSON with @type field can be read into google.protobuf.Any
|
||||
func TestCodecAnyTypeRead(t *testing.T) {
|
||||
// JSON representation of an Any message with @type field
|
||||
jsonData := `{"@type":"type.googleapis.com/google.protobuf.StringValue","value":"test value"}`
|
||||
|
||||
buf := &mockReadWriteCloser{Buffer: bytes.NewBufferString(jsonData + "\n")}
|
||||
c := NewCodec(buf).(*Codec)
|
||||
|
||||
// Read into an Any message
|
||||
anyMsg := &anypb.Any{}
|
||||
if err := c.ReadBody(anyMsg); err != nil {
|
||||
t.Fatalf("Failed to read Any message: %v", err)
|
||||
}
|
||||
|
||||
// Verify the type URL is set
|
||||
expectedTypeURL := "type.googleapis.com/google.protobuf.StringValue"
|
||||
if anyMsg.TypeUrl != expectedTypeURL {
|
||||
t.Errorf("Expected TypeUrl to be %s, got %s", expectedTypeURL, anyMsg.TypeUrl)
|
||||
}
|
||||
|
||||
// Unmarshal the contained message
|
||||
stringValue := &wrapperspb.StringValue{}
|
||||
if err := anyMsg.UnmarshalTo(stringValue); err != nil {
|
||||
t.Fatalf("Failed to unmarshal contained message: %v", err)
|
||||
}
|
||||
|
||||
// Verify the value
|
||||
expectedValue := "test value"
|
||||
if stringValue.Value != expectedValue {
|
||||
t.Errorf("Expected value to be %s, got %s", expectedValue, stringValue.Value)
|
||||
}
|
||||
|
||||
t.Logf("Successfully read Any type from JSON with @type field")
|
||||
}
|
||||
Reference in New Issue
Block a user