mirror of
https://github.com/golang/sys.git
synced 2026-02-08 19:56:04 +03:00
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:
committed by
Tobias Klauser
parent
97ac67df71
commit
69063c4bb7
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user