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  }