Skip to content

Commit 8629c49

Browse files
author
Nils Elde
committed
vcsim: Allow updating custom fields
Closes: #2687 Signed-off-by: Nils Elde <[email protected]>
1 parent e404984 commit 8629c49

File tree

2 files changed

+57
-24
lines changed

2 files changed

+57
-24
lines changed

simulator/custom_fields_manager.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,30 @@ func (c *CustomFieldsManager) SetField(ctx *Context, req *types.SetField) soap.H
188188
Value: req.Value,
189189
}
190190

191+
removeIndex := func(s []types.BaseCustomFieldValue, i int) []types.BaseCustomFieldValue {
192+
new := make([]types.BaseCustomFieldValue, 0)
193+
new = append(new, s[:i]...)
194+
return append(new, s[i+1:]...)
195+
}
196+
197+
removeExistingValues := func(s []types.BaseCustomFieldValue) []types.BaseCustomFieldValue {
198+
for i := 0; i < len(s); {
199+
if s[i].GetCustomFieldValue().Key == newValue.GetCustomFieldValue().Key {
200+
s = removeIndex(s, i)
201+
}
202+
i++
203+
}
204+
return s
205+
}
206+
191207
entity := ctx.Map.Get(req.Entity).(mo.Entity).Entity()
208+
192209
ctx.WithLock(entity, func() {
210+
// Check if custom value and value are already set. If so, remove them.
211+
entity.CustomValue = removeExistingValues(entity.CustomValue)
212+
entity.Value = removeExistingValues(entity.Value)
213+
214+
// Add the new value
193215
entity.CustomValue = append(entity.CustomValue, newValue)
194216
entity.Value = append(entity.Value, newValue)
195217
})

simulator/object_test.go

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ func TestObjectCustomFields(t *testing.T) {
5454

5555
fieldName := "testField"
5656
fieldValue := "12345"
57+
updatedFieldValue := "67890"
5758

5859
// Test that field is not created
5960
err = vmm.SetCustomValue(ctx, fieldName, fieldValue)
@@ -113,37 +114,47 @@ func TestObjectCustomFields(t *testing.T) {
113114
t.Fatalf("len(vm.AvailableField) expected 2, got %d", len(vm.AvailableField))
114115
}
115116

116-
// Set field
117-
err = vmm.SetCustomValue(ctx, fieldName, fieldValue)
118-
if err != nil {
119-
t.Fatal(err)
120-
}
117+
testFieldValues := func(want string) {
118+
if len(vm.CustomValue) != 1 {
119+
t.Fatalf("len(vm.CustomValue) expected 1, got %d", len(vm.CustomValue))
120+
}
121121

122-
if len(vm.CustomValue) != 1 {
123-
t.Fatalf("len(vm.CustomValue) expected 1, got %d", len(vm.CustomValue))
124-
}
122+
if len(vm.Value) != 1 {
123+
t.Fatalf("len(vm.Value) expected 1, got %d", len(vm.Value))
124+
}
125125

126-
if len(vm.Value) != 1 {
127-
t.Fatalf("len(vm.Value) expected 1, got %d", len(vm.Value))
128-
}
126+
if vm.CustomValue[0].(*types.CustomFieldStringValue).Key != field.Key {
127+
t.Fatalf("vm.CustomValue[0].Key expected %d, got %d",
128+
field.Key, vm.CustomValue[0].(*types.CustomFieldStringValue).Key)
129+
}
130+
if vm.CustomValue[0].(*types.CustomFieldStringValue).Value != want {
131+
t.Fatalf("vm.CustomValue[0].Value expected %s, got %s",
132+
want, vm.CustomValue[0].(*types.CustomFieldStringValue).Value)
133+
}
129134

130-
if vm.CustomValue[0].(*types.CustomFieldStringValue).Key != field.Key {
131-
t.Fatalf("vm.CustomValue[0].Key expected %d, got %d",
132-
field.Key, vm.CustomValue[0].(*types.CustomFieldStringValue).Key)
133-
}
134-
if vm.CustomValue[0].(*types.CustomFieldStringValue).Value != fieldValue {
135-
t.Fatalf("vm.CustomValue[0].Value expected %s, got %s",
136-
fieldValue, vm.CustomValue[0].(*types.CustomFieldStringValue).Value)
135+
if vm.Value[0].(*types.CustomFieldStringValue).Key != field.Key {
136+
t.Fatalf("vm.Value[0].Key expected %d, got %d",
137+
field.Key, vm.Value[0].(*types.CustomFieldStringValue).Key)
138+
}
139+
if vm.Value[0].(*types.CustomFieldStringValue).Value != want {
140+
t.Fatalf("vm.Value[0].Value expected %s, got %s",
141+
want, vm.Value[0].(*types.CustomFieldStringValue).Value)
142+
}
137143
}
138144

139-
if vm.Value[0].(*types.CustomFieldStringValue).Key != field.Key {
140-
t.Fatalf("vm.Value[0].Key expected %d, got %d",
141-
field.Key, vm.Value[0].(*types.CustomFieldStringValue).Key)
145+
// Set field
146+
err = vmm.SetCustomValue(ctx, fieldName, fieldValue)
147+
if err != nil {
148+
t.Fatal(err)
142149
}
143-
if vm.Value[0].(*types.CustomFieldStringValue).Value != fieldValue {
144-
t.Fatalf("vm.Value[0].Value expected %s, got %s",
145-
fieldValue, vm.Value[0].(*types.CustomFieldStringValue).Value)
150+
testFieldValues(fieldValue)
151+
152+
// Update field
153+
err = vmm.SetCustomValue(ctx, fieldName, updatedFieldValue)
154+
if err != nil {
155+
t.Fatal(err)
146156
}
157+
testFieldValues(updatedFieldValue)
147158

148159
// Rename field
149160
newName := field.Name + "_renamed"

0 commit comments

Comments
 (0)