From 7fc1e2fff38b7b417c989d4e1a4f32e48f0b7aa8 Mon Sep 17 00:00:00 2001
From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Date: Thu, 13 Nov 2014 16:09:01 +0800
Subject: add TCPMD5SIG socket option helper

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
---
 io/sockopt_test.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)
 create mode 100644 io/sockopt_test.go

(limited to 'io/sockopt_test.go')

diff --git a/io/sockopt_test.go b/io/sockopt_test.go
new file mode 100644
index 00000000..6c81ec12
--- /dev/null
+++ b/io/sockopt_test.go
@@ -0,0 +1,52 @@
+package io
+
+import (
+	"bytes"
+	"syscall"
+	"testing"
+	"unsafe"
+)
+
+func Test_buildTcpMD5Sig(t *testing.T) {
+	s, _ := buildTcpMD5Sig("1.2.3.4", "hello")
+
+	if unsafe.Sizeof(s) != 216 {
+		t.Error("TCPM5Sig struct size is wrong", unsafe.Sizeof(s))
+	}
+
+	buf1 := make([]uint8, 216)
+	p := unsafe.Pointer(&s)
+	src := uintptr(p)
+	for i := uintptr(0); i < 216; i++ {
+		buf1[i] = *(*byte)(unsafe.Pointer(src + i))
+	}
+
+	buf2 := []uint8{2, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 104, 101, 108, 108, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+
+	if bytes.Compare(buf1, buf2) == 0 {
+		t.Log("OK")
+	} else {
+		t.Error("Something wrong v4")
+	}
+}
+
+func Test_buildTcpMD5Sigv6(t *testing.T) {
+	s, _ := buildTcpMD5Sig("fe80::4850:31ff:fe01:fc55", "helloworld")
+
+	buf1 := make([]uint8, 216)
+	p := unsafe.Pointer(&s)
+	src := uintptr(p)
+	for i := uintptr(0); i < 216; i++ {
+		buf1[i] = *(*byte)(unsafe.Pointer(src + i))
+	}
+
+	buf2 := []uint8{10, 0, 0, 0, 0, 0, 0, 0, 254, 128, 0, 0, 0, 0, 0, 0, 72, 80, 49, 255, 254, 1, 252, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 104, 101, 108, 108, 111, 119, 111, 114, 108, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+
+	buf2[0] = syscall.AF_INET6
+
+	if bytes.Compare(buf1, buf2) == 0 {
+		t.Log("OK")
+	} else {
+		t.Error("Something wrong v6")
+	}
+}
-- 
cgit v1.2.3