File: protinfo_test.go

package info (click to toggle)
golang-github-vishvananda-netlink 0.0~git20160306.0.4fdf23c-2~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 476 kB
  • sloc: makefile: 24
file content (98 lines) | stat: -rw-r--r-- 2,625 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
package netlink

import "testing"

func TestProtinfo(t *testing.T) {
	tearDown := setUpNetlinkTest(t)
	defer tearDown()
	master := &Bridge{LinkAttrs{Name: "foo"}}
	if err := LinkAdd(master); err != nil {
		t.Fatal(err)
	}
	iface1 := &Dummy{LinkAttrs{Name: "bar1", MasterIndex: master.Index}}
	iface2 := &Dummy{LinkAttrs{Name: "bar2", MasterIndex: master.Index}}
	iface3 := &Dummy{LinkAttrs{Name: "bar3"}}

	if err := LinkAdd(iface1); err != nil {
		t.Fatal(err)
	}
	if err := LinkAdd(iface2); err != nil {
		t.Fatal(err)
	}
	if err := LinkAdd(iface3); err != nil {
		t.Fatal(err)
	}

	oldpi1, err := LinkGetProtinfo(iface1)
	if err != nil {
		t.Fatal(err)
	}
	oldpi2, err := LinkGetProtinfo(iface2)
	if err != nil {
		t.Fatal(err)
	}

	if err := LinkSetHairpin(iface1, true); err != nil {
		t.Fatal(err)
	}

	if err := LinkSetRootBlock(iface1, true); err != nil {
		t.Fatal(err)
	}

	pi1, err := LinkGetProtinfo(iface1)
	if err != nil {
		t.Fatal(err)
	}
	if !pi1.Hairpin {
		t.Fatalf("Hairpin mode is not enabled for %s, but should", iface1.Name)
	}
	if !pi1.RootBlock {
		t.Fatalf("RootBlock is not enabled for %s, but should", iface1.Name)
	}
	if pi1.Guard != oldpi1.Guard {
		t.Fatalf("Guard field was changed for %s but shouldn't", iface1.Name)
	}
	if pi1.FastLeave != oldpi1.FastLeave {
		t.Fatalf("FastLeave field was changed for %s but shouldn't", iface1.Name)
	}
	if pi1.Learning != oldpi1.Learning {
		t.Fatalf("Learning field was changed for %s but shouldn't", iface1.Name)
	}
	if pi1.Flood != oldpi1.Flood {
		t.Fatalf("Flood field was changed for %s but shouldn't", iface1.Name)
	}

	if err := LinkSetGuard(iface2, true); err != nil {
		t.Fatal(err)
	}
	if err := LinkSetLearning(iface2, false); err != nil {
		t.Fatal(err)
	}
	pi2, err := LinkGetProtinfo(iface2)
	if err != nil {
		t.Fatal(err)
	}
	if pi2.Hairpin {
		t.Fatalf("Hairpin mode is enabled for %s, but shouldn't", iface2.Name)
	}
	if !pi2.Guard {
		t.Fatalf("Guard is not enabled for %s, but should", iface2.Name)
	}
	if pi2.Learning {
		t.Fatalf("Learning is enabled for %s, but shouldn't", iface2.Name)
	}
	if pi2.RootBlock != oldpi2.RootBlock {
		t.Fatalf("RootBlock field was changed for %s but shouldn't", iface2.Name)
	}
	if pi2.FastLeave != oldpi2.FastLeave {
		t.Fatalf("FastLeave field was changed for %s but shouldn't", iface2.Name)
	}
	if pi2.Flood != oldpi2.Flood {
		t.Fatalf("Flood field was changed for %s but shouldn't", iface2.Name)
	}

	if err := LinkSetHairpin(iface3, true); err == nil || err.Error() != "operation not supported" {
		t.Fatalf("Set protinfo attrs for link without master is not supported, but err: %s", err)
	}
}