|
|
|
@ -2,6 +2,7 @@ package s3tables |
|
|
|
|
|
|
|
import ( |
|
|
|
"encoding/json" |
|
|
|
"reflect" |
|
|
|
"strings" |
|
|
|
"testing" |
|
|
|
) |
|
|
|
@ -127,23 +128,59 @@ func TestExpandNamespace(t *testing.T) { |
|
|
|
} |
|
|
|
|
|
|
|
func TestNamespaceMetadataPropertiesRoundTrip(t *testing.T) { |
|
|
|
metadata := namespaceMetadata{ |
|
|
|
Namespace: []string{"analytics"}, |
|
|
|
Properties: map[string]string{"owner": "finance"}, |
|
|
|
OwnerAccountID: "123456789012", |
|
|
|
testCases := []struct { |
|
|
|
name string |
|
|
|
metadata namespaceMetadata |
|
|
|
}{ |
|
|
|
{ |
|
|
|
name: "with properties", |
|
|
|
metadata: namespaceMetadata{ |
|
|
|
Namespace: []string{"analytics"}, |
|
|
|
Properties: map[string]string{"owner": "finance"}, |
|
|
|
OwnerAccountID: "123456789012", |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: "nil properties", |
|
|
|
metadata: namespaceMetadata{ |
|
|
|
Namespace: []string{"analytics"}, |
|
|
|
Properties: nil, |
|
|
|
OwnerAccountID: "123456789012", |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: "empty properties", |
|
|
|
metadata: namespaceMetadata{ |
|
|
|
Namespace: []string{"analytics"}, |
|
|
|
Properties: map[string]string{}, |
|
|
|
OwnerAccountID: "123456789012", |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
data, err := json.Marshal(metadata) |
|
|
|
if err != nil { |
|
|
|
t.Fatalf("json.Marshal(metadata) returned error: %v", err) |
|
|
|
} |
|
|
|
for _, tc := range testCases { |
|
|
|
t.Run(tc.name, func(t *testing.T) { |
|
|
|
data, err := json.Marshal(tc.metadata) |
|
|
|
if err != nil { |
|
|
|
t.Fatalf("json.Marshal(metadata) returned error: %v", err) |
|
|
|
} |
|
|
|
|
|
|
|
var decoded namespaceMetadata |
|
|
|
if err := json.Unmarshal(data, &decoded); err != nil { |
|
|
|
t.Fatalf("json.Unmarshal(data) returned error: %v", err) |
|
|
|
} |
|
|
|
var decoded namespaceMetadata |
|
|
|
if err := json.Unmarshal(data, &decoded); err != nil { |
|
|
|
t.Fatalf("json.Unmarshal(data) returned error: %v", err) |
|
|
|
} |
|
|
|
|
|
|
|
if decoded.Properties["owner"] != "finance" { |
|
|
|
t.Fatalf("decoded.Properties[owner] = %q, want %q", decoded.Properties["owner"], "finance") |
|
|
|
// Due to `omitempty`, nil and empty maps are unmarshaled as nil.
|
|
|
|
if len(tc.metadata.Properties) == 0 { |
|
|
|
if decoded.Properties != nil { |
|
|
|
t.Fatalf("expected nil properties for empty/nil input, got %v", decoded.Properties) |
|
|
|
} |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
if !reflect.DeepEqual(decoded.Properties, tc.metadata.Properties) { |
|
|
|
t.Fatalf("decoded.Properties = %v, want %v", decoded.Properties, tc.metadata.Properties) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
} |