github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/api/v1/resourcemeta_test.go (about) 1 package v1 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestResourceMetaMarshal(t *testing.T) { 11 apiID := "99" 12 primaryKey := "4321" 13 14 meta1 := &ResourceMeta{ 15 GroupVersionKind: GroupVersionKind{ 16 GroupKind: GroupKind{ 17 Group: "group", 18 Kind: "kind", 19 }, 20 APIVersion: "v1", 21 }, 22 Name: "meta1", 23 Title: "meta1", 24 Metadata: Metadata{ 25 ID: "123", 26 }, 27 Tags: []string{"tag1", "tag2"}, 28 Attributes: map[string]string{ 29 "abc": "123", 30 }, 31 } 32 33 empty := meta1.GetSubResource("abc123") 34 assert.Nil(t, empty) 35 36 meta1.SetSubResource("x-agent-details", map[string]interface{}{ 37 "apiID": apiID, 38 }) 39 40 // Get the sub resource by name, and update the value returned 41 resource := meta1.GetSubResource("x-agent-details") 42 m := resource.(map[string]interface{}) 43 m["primaryKey"] = primaryKey 44 45 // save the resource with the new value 46 meta1.SetSubResource("x-agent-details", m) 47 48 bts, err := json.Marshal(meta1) 49 assert.Nil(t, err) 50 assert.NotNil(t, bts) 51 52 // Unmarshal the ResourceMeta bytes to a map to confirm that MarshalJSON saved the SubResource correctly 53 values := map[string]interface{}{} 54 err = json.Unmarshal(bts, &values) 55 assert.Nil(t, err) 56 57 // Get the x-agent-details sub resource, and convert it to a map 58 subResource := values["x-agent-details"] 59 xAgentDetailsSub, ok := subResource.(map[string]interface{}) 60 assert.True(t, ok) 61 62 assert.Equal(t, apiID, xAgentDetailsSub["apiID"]) 63 assert.Equal(t, primaryKey, xAgentDetailsSub["primaryKey"]) 64 65 // Unmarshal the data from meta1, to meta2, which is empty, and assert meta2 contains the same data from meta1 66 meta2 := &ResourceMeta{} 67 err = json.Unmarshal(bts, meta2) 68 assert.Nil(t, err) 69 70 meta1.Metadata.Audit = AuditMetadata{} 71 meta2.Metadata.Audit = AuditMetadata{} 72 assert.Equal(t, meta1, meta2) 73 74 // expect to the sub resources to be equal 75 assert.True(t, len(meta2.SubResources) == 1) 76 assert.Equal(t, xAgentDetailsSub, meta2.SubResources["x-agent-details"]) 77 78 // unset the name 79 meta1.Name = "" 80 81 bts, err = json.Marshal(meta1) 82 assert.Nil(t, err) 83 assert.NotNil(t, bts) 84 85 // Unmarshal the ResourceMeta bytes to a map to confirm that MarshalJSON did not save name 86 values = map[string]interface{}{} 87 json.Unmarshal(bts, &values) 88 assert.NotContains(t, values, "name") 89 90 // Unmarshal the ResourceMeta bytes to a map to confirm that MarshalJSON 91 meta3 := ResourceMeta{} 92 err = json.Unmarshal(bts, &meta3) 93 assert.Nil(t, err) 94 95 assert.Equal(t, "", meta3.Name) 96 } 97 98 func TestResourceMeta(t *testing.T) { 99 meta := &ResourceMeta{ 100 GroupVersionKind: GroupVersionKind{ 101 GroupKind: GroupKind{ 102 Group: "group", 103 Kind: "kind", 104 }, 105 APIVersion: "v1", 106 }, 107 Title: "title", 108 Metadata: Metadata{ 109 ID: "333", 110 References: []Reference{ 111 { 112 Group: "ref1group", 113 Kind: "ref1kind", 114 ID: "ref1id", 115 Name: "ref1name", 116 ScopeName: "ref1scope", 117 Type: "ref1type", 118 }, 119 { 120 Group: "ref2group", 121 Kind: "ref2kind", 122 ID: "ref2id", 123 Name: "ref2name", 124 ScopeName: "ref2scope", 125 Type: "ref2type", 126 }, 127 { 128 Group: "ref3group", 129 Kind: "ref3kind", 130 ID: "ref3id", 131 Name: "ref3name", 132 ScopeName: "ref3scope", 133 Type: "ref3type", 134 }, 135 }, 136 }, 137 } 138 139 assert.Equal(t, meta.Metadata, meta.GetMetadata()) 140 assert.Equal(t, meta.GroupVersionKind, meta.GetGroupVersionKind()) 141 142 meta.SetName("name") 143 assert.Equal(t, meta.Name, meta.GetName()) 144 145 assert.Equal(t, 0, len(meta.GetAttributes())) 146 meta.SetAttributes(map[string]string{ 147 "abc": "123", 148 }) 149 assert.Equal(t, meta.Attributes, meta.GetAttributes()) 150 151 assert.Equal(t, 0, len(meta.GetTags())) 152 meta.SetTags([]string{"tag1", "tag2"}) 153 assert.Equal(t, meta.Tags, meta.GetTags()) 154 155 // test GetReferenceByGVK 156 ref1GVK := GroupVersionKind{ 157 GroupKind: GroupKind{ 158 Group: "ref1group", 159 Kind: "ref1kind", 160 }, 161 APIVersion: "v1", 162 } 163 ref2GVK := GroupVersionKind{ 164 GroupKind: GroupKind{ 165 Group: "ref2group", 166 Kind: "ref2kind", 167 }, 168 APIVersion: "v1", 169 } 170 ref3GVK := GroupVersionKind{ 171 GroupKind: GroupKind{ 172 Group: "ref3group", 173 Kind: "ref3kind", 174 }, 175 APIVersion: "v1", 176 } 177 ref1test := meta.GetReferenceByGVK(ref1GVK) 178 assert.Equal(t, ref1test, meta.Metadata.References[0]) 179 ref2test := meta.GetReferenceByGVK(ref2GVK) 180 assert.Equal(t, ref2test, meta.Metadata.References[1]) 181 ref3test := meta.GetReferenceByGVK(ref3GVK) 182 assert.Equal(t, ref3test, meta.Metadata.References[2]) 183 } 184 185 // should be able to call get methods if meta is nil 186 func TestResourceMetaNilReference(t *testing.T) { 187 var meta *ResourceMeta 188 189 assert.Equal(t, "", meta.GetName()) 190 assert.Equal(t, Metadata{}, meta.GetMetadata()) 191 assert.Equal(t, GroupVersionKind{}, meta.GetGroupVersionKind()) 192 assert.Equal(t, map[string]string{}, meta.GetAttributes()) 193 assert.Equal(t, []string{}, meta.GetTags()) 194 assert.Nil(t, meta.GetSubResource("abc")) 195 } 196 197 func TestResourceMetaGetSelfLink(t *testing.T) { 198 plurals["kind"] = "kinds" 199 plurals["scopeKind"] = "scopeKinds" 200 201 meta := &ResourceMeta{ 202 GroupVersionKind: GroupVersionKind{ 203 GroupKind: GroupKind{ 204 Group: "group", 205 Kind: "kind", 206 }, 207 }, 208 Title: "title", 209 Metadata: Metadata{ 210 ID: "333", 211 }, 212 Name: "name", 213 } 214 215 // no version 216 link := meta.GetSelfLink() 217 assert.Equal(t, "", link) 218 219 meta.APIVersion = "v1" 220 221 // no scope 222 link = meta.GetSelfLink() 223 assert.Equal(t, "/group/v1/kinds/name", link) 224 225 meta.Metadata.Scope = MetadataScope{ 226 Name: "scope", 227 Kind: "scopeKind", 228 } 229 230 scopeKindMap[meta.GroupKind] = "scopeKind" 231 232 // no scope kind 233 link = meta.GetSelfLink() 234 assert.Equal(t, "/group/v1/scopeKinds/scope/kinds/name", link) 235 236 // selflink 237 meta.Metadata.SelfLink = "/selflink" 238 link = meta.GetSelfLink() 239 assert.Equal(t, "/selflink", link) 240 }