github.com/vmware/govmomi@v0.51.0/toolbox/vix/property_test.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package vix 6 7 import ( 8 "encoding/base64" 9 "encoding/binary" 10 "math" 11 "reflect" 12 "testing" 13 ) 14 15 func TestToolsStateProperties(t *testing.T) { 16 // captured from vmtoolsd 17 str := `lxEAAAIAAAAoAAAATGludXggNC40LjAtMjEtZ2VuZXJpYyBVYnVudHUgMTYuMDQgTFRTAKgRAAACAAAACgAAAHVidW50dS02NACfEQAAAgAAAA0AAABWTXdhcmUgVG9vbHMAlBEAAAIAAAAVAAAAMTAuMC41IGJ1aWxkLTMyMjc4NzIAmREAAAIAAAATAAAAdWJ1bnR1LTE2MDQtdm13YXJlAJURAAABAAAABAAAAAEAAACWEQAAAQAAAAQAAAABAAAAmBEAAAIAAAABAAAAAMsAAAACAAAAEQAAAC90bXAvdm13YXJlLXJvb3QApxEAAAEAAAAEAAAAQAAAAK0RAAACAAAACgAAAC9tbnQvaGdmcwC8EQAAAwAAAAEAAAAAvREAAAMAAAABAAAAAL4RAAADAAAAAQAAAAC/EQAAAwAAAAEAAAAAwBEAAAMAAAABAAAAAMERAAADAAAAAQAAAADCEQAAAwAAAAEAAAAAwxEAAAMAAAABAAAAAMQRAAADAAAAAQAAAADFEQAAAwAAAAEAAAAAxhEAAAMAAAABAAAAAMcRAAADAAAAAQAAAADIEQAAAwAAAAEAAAAAyREAAAMAAAABAAAAAMoRAAADAAAAAQAAAADLEQAAAwAAAAEAAAAAzBEAAAMAAAABAAAAAM0RAAADAAAAAQAAAADOEQAAAwAAAAEAAAAAzxEAAAMAAAABAAAAANARAAADAAAAAQAAAADREQAAAwAAAAEAAAAA0hEAAAMAAAABAAAAANMRAAADAAAAAQAAAADUEQAAAwAAAAEAAAAA1REAAAMAAAABAAAAANYRAAADAAAAAQAAAADXEQAAAwAAAAEAAAAA2BEAAAMAAAABAAAAAA==` 18 19 data, err := base64.StdEncoding.DecodeString(str) 20 if err != nil { 21 t.Fatal(err) 22 } 23 24 var props PropertyList 25 26 err = props.UnmarshalBinary(data) 27 if err != nil { 28 t.Error(err) 29 } 30 31 data2, err := props.MarshalBinary() 32 if err != nil { 33 t.Fatal(err) 34 } 35 36 str2 := base64.StdEncoding.EncodeToString(data2) 37 if str != str2 { 38 t.Error("encoding mismatch") 39 } 40 } 41 42 func TestMarshalProperties(t *testing.T) { 43 in := PropertyList{ 44 NewInt32Property(1, math.MaxInt32), 45 NewStringProperty(2, "foo"), 46 NewBoolProperty(3, true), 47 NewInt64Property(4, math.MaxInt64), 48 NewBlobProperty(5, []byte("deadbeef")), 49 } 50 51 buf, err := in.MarshalBinary() 52 if err != nil { 53 t.Fatal(err) 54 } 55 56 var out PropertyList 57 58 err = out.UnmarshalBinary(buf) 59 if err != nil { 60 t.Fatal(err) 61 } 62 63 if !reflect.DeepEqual(in, out) { 64 t.Error("marshal mismatch") 65 } 66 67 } 68 69 // hit unmarshal error paths 70 func TestUnmarshalPropertiesErrors(t *testing.T) { 71 props := PropertyList{ 72 NewBoolProperty(1, true), 73 NewStringProperty(1, "foo"), 74 NewBlobProperty(2, []byte("deadbeef")), 75 } 76 77 props[0].header.Kind = 0xff 78 79 for _, prop := range props { 80 buf, _ := prop.MarshalBinary() 81 82 for i, l := range []int{1, binary.Size(prop.header)} { 83 err := prop.UnmarshalBinary(buf[:l]) 84 if err == nil { 85 t.Errorf("test %d (len=%d) expected error", i, l) 86 } 87 } 88 } 89 90 buf, _ := props.MarshalBinary() 91 err := props.UnmarshalBinary(buf) 92 if err == nil { 93 t.Error("expected error") 94 } 95 }