...

Source file src/net/mac_test.go

Documentation: net

		 1  // Copyright 2011 The Go Authors. All rights reserved.
		 2  // Use of this source code is governed by a BSD-style
		 3  // license that can be found in the LICENSE file.
		 4  
		 5  package net
		 6  
		 7  import (
		 8  	"reflect"
		 9  	"strings"
		10  	"testing"
		11  )
		12  
		13  var parseMACTests = []struct {
		14  	in	string
		15  	out HardwareAddr
		16  	err string
		17  }{
		18  	// See RFC 7042, Section 2.1.1.
		19  	{"00:00:5e:00:53:01", HardwareAddr{0x00, 0x00, 0x5e, 0x00, 0x53, 0x01}, ""},
		20  	{"00-00-5e-00-53-01", HardwareAddr{0x00, 0x00, 0x5e, 0x00, 0x53, 0x01}, ""},
		21  	{"0000.5e00.5301", HardwareAddr{0x00, 0x00, 0x5e, 0x00, 0x53, 0x01}, ""},
		22  
		23  	// See RFC 7042, Section 2.2.2.
		24  	{"02:00:5e:10:00:00:00:01", HardwareAddr{0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01}, ""},
		25  	{"02-00-5e-10-00-00-00-01", HardwareAddr{0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01}, ""},
		26  	{"0200.5e10.0000.0001", HardwareAddr{0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01}, ""},
		27  
		28  	// See RFC 4391, Section 9.1.1.
		29  	{
		30  		"00:00:00:00:fe:80:00:00:00:00:00:00:02:00:5e:10:00:00:00:01",
		31  		HardwareAddr{
		32  			0x00, 0x00, 0x00, 0x00,
		33  			0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		34  			0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01,
		35  		},
		36  		"",
		37  	},
		38  	{
		39  		"00-00-00-00-fe-80-00-00-00-00-00-00-02-00-5e-10-00-00-00-01",
		40  		HardwareAddr{
		41  			0x00, 0x00, 0x00, 0x00,
		42  			0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		43  			0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01,
		44  		},
		45  		"",
		46  	},
		47  	{
		48  		"0000.0000.fe80.0000.0000.0000.0200.5e10.0000.0001",
		49  		HardwareAddr{
		50  			0x00, 0x00, 0x00, 0x00,
		51  			0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		52  			0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01,
		53  		},
		54  		"",
		55  	},
		56  
		57  	{"ab:cd:ef:AB:CD:EF", HardwareAddr{0xab, 0xcd, 0xef, 0xab, 0xcd, 0xef}, ""},
		58  	{"ab:cd:ef:AB:CD:EF:ab:cd", HardwareAddr{0xab, 0xcd, 0xef, 0xab, 0xcd, 0xef, 0xab, 0xcd}, ""},
		59  	{
		60  		"ab:cd:ef:AB:CD:EF:ab:cd:ef:AB:CD:EF:ab:cd:ef:AB:CD:EF:ab:cd",
		61  		HardwareAddr{
		62  			0xab, 0xcd, 0xef, 0xab,
		63  			0xcd, 0xef, 0xab, 0xcd, 0xef, 0xab, 0xcd, 0xef,
		64  			0xab, 0xcd, 0xef, 0xab, 0xcd, 0xef, 0xab, 0xcd,
		65  		},
		66  		"",
		67  	},
		68  
		69  	{"01.02.03.04.05.06", nil, "invalid MAC address"},
		70  	{"01:02:03:04:05:06:", nil, "invalid MAC address"},
		71  	{"x1:02:03:04:05:06", nil, "invalid MAC address"},
		72  	{"01002:03:04:05:06", nil, "invalid MAC address"},
		73  	{"01:02003:04:05:06", nil, "invalid MAC address"},
		74  	{"01:02:03004:05:06", nil, "invalid MAC address"},
		75  	{"01:02:03:04005:06", nil, "invalid MAC address"},
		76  	{"01:02:03:04:05006", nil, "invalid MAC address"},
		77  	{"01-02:03:04:05:06", nil, "invalid MAC address"},
		78  	{"01:02-03-04-05-06", nil, "invalid MAC address"},
		79  	{"0123:4567:89AF", nil, "invalid MAC address"},
		80  	{"0123-4567-89AF", nil, "invalid MAC address"},
		81  }
		82  
		83  func TestParseMAC(t *testing.T) {
		84  	match := func(err error, s string) bool {
		85  		if s == "" {
		86  			return err == nil
		87  		}
		88  		return err != nil && strings.Contains(err.Error(), s)
		89  	}
		90  
		91  	for i, tt := range parseMACTests {
		92  		out, err := ParseMAC(tt.in)
		93  		if !reflect.DeepEqual(out, tt.out) || !match(err, tt.err) {
		94  			t.Errorf("ParseMAC(%q) = %v, %v, want %v, %v", tt.in, out, err, tt.out, tt.err)
		95  		}
		96  		if tt.err == "" {
		97  			// Verify that serialization works too, and that it round-trips.
		98  			s := out.String()
		99  			out2, err := ParseMAC(s)
	 100  			if err != nil {
	 101  				t.Errorf("%d. ParseMAC(%q) = %v", i, s, err)
	 102  				continue
	 103  			}
	 104  			if !reflect.DeepEqual(out2, out) {
	 105  				t.Errorf("%d. ParseMAC(%q) = %v, want %v", i, s, out2, out)
	 106  			}
	 107  		}
	 108  	}
	 109  }
	 110  

View as plain text