unix: test AF_VSOCK sockets on linux

Follow the implementation of the tests added in CL 354269 for darwin.

Change-Id: I00701227dfb26169a356d875ddb3737849d0bba0
Reviewed-on: https://go-review.googlesource.com/c/sys/+/356289
Trust: Tobias Klauser <tobias.klauser@gmail.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matt Layher <mdlayher@gmail.com>
This commit is contained in:
Tobias Klauser
2021-10-15 21:31:56 +02:00
committed by Tobias Klauser
parent 97ac67df71
commit 69063c4bb7
2 changed files with 80 additions and 2 deletions

View File

@@ -138,7 +138,7 @@ func TestSockaddrCtl_sockaddr(t *testing.T) {
}
}
func TestSockaddVM_sockaddr(t *testing.T) {
func TestSockaddrVM_sockaddr(t *testing.T) {
tests := []struct {
name string
sa *SockaddrVM
@@ -154,7 +154,7 @@ func TestSockaddVM_sockaddr(t *testing.T) {
},
},
{
name: "with CID and Port",
name: "with CID and port",
sa: &SockaddrVM{
CID: VMADDR_CID_HOST,
Port: VMADDR_PORT_ANY,

View File

@@ -253,6 +253,23 @@ func Test_anyToSockaddr(t *testing.T) {
err: EINVAL,
proto: makeProto(^0),
},
{
name: "AF_VSOCK emtpy",
rsa: sockaddrVMToAny(RawSockaddrVM{}),
err: EAFNOSUPPORT,
},
{
name: "AF_VSOCK Cid and Port",
rsa: sockaddrVMToAny(RawSockaddrVM{
Family: AF_VSOCK,
Cid: VMADDR_CID_HOST,
Port: VMADDR_PORT_ANY,
}),
sa: &SockaddrVM{
CID: VMADDR_CID_HOST,
Port: VMADDR_PORT_ANY,
},
},
{
name: "AF_MAX EAFNOSUPPORT",
rsa: &RawSockaddrAny{
@@ -788,6 +805,58 @@ func TestSockaddrNFCLLCP_sockaddr(t *testing.T) {
}
}
func TestSockaddrVM_sockaddr(t *testing.T) {
tests := []struct {
name string
sa *SockaddrVM
raw *RawSockaddrVM
err error
}{
{
name: "empty",
sa: &SockaddrVM{},
raw: &RawSockaddrVM{
Family: AF_VSOCK,
},
},
{
name: "with CID, port and flags",
sa: &SockaddrVM{
CID: VMADDR_CID_HOST,
Port: VMADDR_PORT_ANY,
Flags: VMADDR_FLAG_TO_HOST,
},
raw: &RawSockaddrVM{
Family: AF_VSOCK,
Port: VMADDR_PORT_ANY,
Cid: VMADDR_CID_HOST,
Flags: VMADDR_FLAG_TO_HOST,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
out, l, err := tt.sa.sockaddr()
if err != tt.err {
t.Fatalf("unexpected error: %v, want: %v", err, tt.err)
}
// Must be 0 on error or a fixed size otherwise.
if (tt.err != nil && l != 0) || (tt.raw != nil && l != SizeofSockaddrVM) {
t.Fatalf("unexpected Socklen: %d", l)
}
if out != nil {
raw := (*RawSockaddrVM)(out)
if !reflect.DeepEqual(raw, tt.raw) {
t.Fatalf("unexpected RawSockaddrVM:\n got: %#v\nwant: %#v", raw, tt.raw)
}
}
})
}
}
// These helpers explicitly copy the contents of in into out to produce
// the correct sockaddr structure, without relying on unsafe casting to
// a type of a larger size.
@@ -862,3 +931,12 @@ func sockaddrNFCLLCPToAny(in RawSockaddrNFCLLCP) *RawSockaddrAny {
)
return &out
}
func sockaddrVMToAny(in RawSockaddrVM) *RawSockaddrAny {
var out RawSockaddrAny
copy(
(*(*[SizeofSockaddrAny]byte)(unsafe.Pointer(&out)))[:],
(*(*[SizeofSockaddrVM]byte)(unsafe.Pointer(&in)))[:],
)
return &out
}