File: fou_test.go

package info (click to toggle)
golang-github-vishvananda-netlink 1.0.0+git20181030.023a6da-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, sid
  • size: 928 kB
  • sloc: makefile: 25
file content (109 lines) | stat: -rw-r--r-- 2,664 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// +build linux

package netlink

import (
	"testing"
)

func TestFouDeserializeMsg(t *testing.T) {
	var msg []byte

	// deserialize a valid message
	msg = []byte{3, 1, 0, 0, 5, 0, 2, 0, 2, 0, 0, 0, 6, 0, 1, 0, 21, 179, 0, 0, 5, 0, 3, 0, 4, 0, 0, 0, 5, 0, 4, 0, 1, 0, 0, 0}
	if fou, err := deserializeFouMsg(msg); err != nil {
		t.Error(err.Error())
	} else {

		// check if message was deserialized correctly
		if fou.Family != FAMILY_V4 {
			t.Errorf("expected family %d, got %d", FAMILY_V4, fou.Family)
		}

		if fou.Port != 5555 {
			t.Errorf("expected port 5555, got %d", fou.Port)
		}

		if fou.Protocol != 4 { // ipip
			t.Errorf("expected protocol 4, got %d", fou.Protocol)
		}

		if fou.EncapType != FOU_ENCAP_DIRECT {
			t.Errorf("expected encap type %d, got %d", FOU_ENCAP_DIRECT, fou.EncapType)
		}
	}

	// deserialize truncated attribute header
	msg = []byte{3, 1, 0, 0, 5, 0}
	if _, err := deserializeFouMsg(msg); err == nil {
		t.Error("expected attribute header truncated error")
	} else if err != ErrAttrHeaderTruncated {
		t.Errorf("unexpected error: %s", err.Error())
	}

	// deserialize truncated attribute header
	msg = []byte{3, 1, 0, 0, 5, 0, 2, 0, 2, 0, 0}
	if _, err := deserializeFouMsg(msg); err == nil {
		t.Error("expected attribute body truncated error")
	} else if err != ErrAttrBodyTruncated {
		t.Errorf("unexpected error: %s", err.Error())
	}
}

func TestFouAddDel(t *testing.T) {
	// foo-over-udp was merged in 3.18 so skip these tests if the kernel is too old
	minKernelRequired(t, 3, 18)

	// the fou module is usually not compiled in the kernel so we'll load it
	tearDown := setUpNetlinkTestWithKModule(t, "fou")
	defer tearDown()

	fou := Fou{
		Port:      5555,
		Family:    FAMILY_V4,
		Protocol:  4, // ipip
		EncapType: FOU_ENCAP_DIRECT,
	}

	if err := FouAdd(fou); err != nil {
		t.Fatal(err)
	}

	list, err := FouList(FAMILY_V4)
	if err != nil {
		t.Fatal(err)
	}

	if len(list) != 1 {
		t.Fatalf("expected 1 fou, got %d", len(list))
	}

	if list[0].Port != fou.Port {
		t.Errorf("expected port %d, got %d", fou.Port, list[0].Port)
	}

	if list[0].Family != fou.Family {
		t.Errorf("expected family %d, got %d", fou.Family, list[0].Family)
	}

	if list[0].Protocol != fou.Protocol {
		t.Errorf("expected protocol %d, got %d", fou.Protocol, list[0].Protocol)
	}

	if list[0].EncapType != fou.EncapType {
		t.Errorf("expected encaptype %d, got %d", fou.EncapType, list[0].EncapType)
	}

	if err := FouDel(Fou{Port: fou.Port, Family: fou.Family}); err != nil {
		t.Fatal(err)
	}

	list, err = FouList(FAMILY_V4)
	if err != nil {
		t.Fatal(err)
	}

	if len(list) != 0 {
		t.Fatalf("expected 0 fou, got %d", len(list))
	}
}