github.com/contiv/libOpenflow@v0.0.0-20210609050114-d967b14cc688/openflow13/bundles_test.go (about)

     1  package openflow13
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestBundleControl(t *testing.T) {
    12  	bundleCtrl := &BundleControl{
    13  		BundleID: uint32(100),
    14  		Type:     OFPBCT_OPEN_REQUEST,
    15  		Flags:    OFPBCT_ATOMIC,
    16  	}
    17  	data, err := bundleCtrl.MarshalBinary()
    18  	if err != nil {
    19  		t.Fatalf("Failed to Marshal BundleControl message: %v", err)
    20  	}
    21  	bundleCtrl2 := new(BundleControl)
    22  	err = bundleCtrl2.UnmarshalBinary(data)
    23  	if err != nil {
    24  		t.Fatalf("Failed to Unmarshal BundleControl message: %v", err)
    25  	}
    26  	if err := bundleCtrlEqual(bundleCtrl, bundleCtrl2); err != nil {
    27  		t.Errorf(err.Error())
    28  	}
    29  }
    30  
    31  func TestBundleAdd(t *testing.T) {
    32  	bundleAdd := &BundleAdd{
    33  		BundleID: uint32(100),
    34  		Flags:    OFPBCT_ATOMIC,
    35  		Message:  NewFlowMod(),
    36  	}
    37  
    38  	data, err := bundleAdd.MarshalBinary()
    39  	if err != nil {
    40  		t.Fatalf("Failed to Marshal BundleAdd message: %v", err)
    41  	}
    42  	bundleAdd2 := new(BundleAdd)
    43  	err = bundleAdd2.UnmarshalBinary(data)
    44  	if err != nil {
    45  		t.Fatalf("Failed to Unmarshal BundleAdd message: %v", err)
    46  	}
    47  	if err := bundleAddEqual(bundleAdd, bundleAdd2); err != nil {
    48  		t.Error(err.Error())
    49  	}
    50  }
    51  
    52  func TestBundleError(t *testing.T) {
    53  	bundleError := NewBundleError()
    54  	bundleError.Code = BEC_TIMEOUT
    55  	data, err := bundleError.MarshalBinary()
    56  	if err != nil {
    57  		t.Fatalf("Failed to Marshal VendorError message: %v", err)
    58  	}
    59  	var bundleErr2 VendorError
    60  	err = bundleErr2.UnmarshalBinary(data)
    61  	if err != nil {
    62  		t.Fatalf("Failed to Unmarshal VendorError message: %v", err)
    63  	}
    64  	assert.Equal(t, bundleError.Type, bundleErr2.Type)
    65  	assert.Equal(t, bundleError.Code, bundleErr2.Code)
    66  	assert.Equal(t, bundleError.ExperimenterID, bundleErr2.ExperimenterID)
    67  	assert.Equal(t, bundleError.Header.Type, bundleErr2.Header.Type)
    68  }
    69  
    70  func TestVendorHeader(t *testing.T) {
    71  	vh1 := new(VendorHeader)
    72  	vh1.Header.Type = Type_Experimenter
    73  	vh1.Header.Length = vh1.Len()
    74  	vh1.Vendor = uint32(1000)
    75  	vh1.ExperimenterType = uint32(2000)
    76  	data, err := vh1.MarshalBinary()
    77  	if err != nil {
    78  		t.Fatalf("Failed to Marshal VendorHeader message: %v", err)
    79  	}
    80  	var vh2 VendorHeader
    81  	err = vh2.UnmarshalBinary(data)
    82  	if err != nil {
    83  		t.Fatalf("Failed to Unmarshal VendorHeader message: %v", err)
    84  	}
    85  	assert.Equal(t, vh1.Header.Type, vh2.Header.Type)
    86  	assert.Equal(t, vh1.Vendor, vh2.Vendor)
    87  	assert.Equal(t, vh1.ExperimenterType, vh2.ExperimenterType)
    88  }
    89  
    90  func TestBundleControlMessage(t *testing.T) {
    91  	testFunc := func(oriMessage *VendorHeader) {
    92  		data, err := oriMessage.MarshalBinary()
    93  		if err != nil {
    94  			t.Fatalf("Failed to Marshal message: %v", err)
    95  		}
    96  		newMessage := new(VendorHeader)
    97  		err = newMessage.UnmarshalBinary(data)
    98  		if err != nil {
    99  			t.Fatalf("Failed to UnMarshal message: %v", err)
   100  		}
   101  		bundleCtrl := oriMessage.VendorData.(*BundleControl)
   102  		bundleCtrl2, ok := newMessage.VendorData.(*BundleControl)
   103  		if !ok {
   104  			t.Fatalf("Failed to cast BundleControl from result")
   105  		}
   106  		if err = bundleCtrlEqual(bundleCtrl, bundleCtrl2); err != nil {
   107  			t.Error(err.Error())
   108  		}
   109  	}
   110  
   111  	bundleCtrl := &BundleControl{
   112  		BundleID: uint32(100),
   113  		Type:     OFPBCT_OPEN_REQUEST,
   114  		Flags:    OFPBCT_ATOMIC,
   115  	}
   116  	msg := NewBundleControl(bundleCtrl)
   117  	testFunc(msg)
   118  }
   119  
   120  func TestBundleAddMessage(t *testing.T) {
   121  	testFunc := func(oriMessage *VendorHeader) {
   122  		data, err := oriMessage.MarshalBinary()
   123  		if err != nil {
   124  			t.Fatalf("Failed to Marshal message: %v", err)
   125  		}
   126  		newMessage := new(VendorHeader)
   127  		err = newMessage.UnmarshalBinary(data)
   128  		if err != nil {
   129  			t.Fatalf("Failed to UnMarshal message: %v", err)
   130  		}
   131  		bundleAdd := oriMessage.VendorData.(*BundleAdd)
   132  		bundleAdd2, ok := newMessage.VendorData.(*BundleAdd)
   133  		if !ok {
   134  			t.Fatalf("Failed to cast BundleControl from result")
   135  		}
   136  		if err = bundleAddEqual(bundleAdd, bundleAdd2); err != nil {
   137  			t.Error(err.Error())
   138  		}
   139  	}
   140  
   141  	bundleAdd := &BundleAdd{
   142  		BundleID: uint32(100),
   143  		Flags:    OFPBCT_ATOMIC,
   144  		Message:  NewFlowMod(),
   145  	}
   146  	msg := NewBundleAdd(bundleAdd)
   147  	testFunc(msg)
   148  }
   149  
   150  func bundleCtrlEqual(bundleCtrl, bundleCtrl2 *BundleControl) error {
   151  	if bundleCtrl.BundleID != bundleCtrl2.BundleID {
   152  		return errors.New("bundle ID not equal")
   153  	}
   154  	if bundleCtrl.Type != bundleCtrl2.Type {
   155  		return errors.New("bundle Type not equal")
   156  	}
   157  	if bundleCtrl.Flags != bundleCtrl2.Flags {
   158  		return errors.New("bundle Flags not equal")
   159  	}
   160  	return nil
   161  }
   162  
   163  func bundleAddEqual(bundleAdd, bundleAdd2 *BundleAdd) error {
   164  	if bundleAdd.BundleID != bundleAdd2.BundleID {
   165  		return errors.New("bundle ID not equal")
   166  	}
   167  	if bundleAdd.Flags != bundleAdd2.Flags {
   168  		return errors.New("bundle Flags not equal")
   169  	}
   170  	msgData, _ := bundleAdd.Message.MarshalBinary()
   171  	msgData2, err := bundleAdd2.Message.MarshalBinary()
   172  	if err != nil {
   173  		return err
   174  	}
   175  	if !bytes.Equal(msgData, msgData2) {
   176  		return errors.New("bundle message not equal")
   177  	}
   178  	return nil
   179  }