diff options
author | Tamir Duberstein <tamird@google.com> | 2019-05-09 15:21:50 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2019-05-09 15:23:03 -0700 |
commit | 0f4be95a336bd5dbf214bc40eb5d1bbb5fce36a4 (patch) | |
tree | 07f34cd1ef2ee67bc85da09fa75ce195d6c73c77 /pkg/dhcp/dhcp_test.go | |
parent | c3b6d4587edc1c04c86c2504b68a41b8c77fd202 (diff) |
Remove dhcp client
This was upstreamed from Fuchsia, but it is pretty buggy and doesn't
rely on any private APIs. Thus it can be checked into the Fuchsia source
tree without forking netstack, where we can more easily iterate on (and
eventually remove) it.
PiperOrigin-RevId: 247506582
Change-Id: Ifb1b60c6c4941c374a59c5570a6a9cacf2468981
Diffstat (limited to 'pkg/dhcp/dhcp_test.go')
-rw-r--r-- | pkg/dhcp/dhcp_test.go | 322 |
1 files changed, 0 insertions, 322 deletions
diff --git a/pkg/dhcp/dhcp_test.go b/pkg/dhcp/dhcp_test.go deleted file mode 100644 index 751626bb0..000000000 --- a/pkg/dhcp/dhcp_test.go +++ /dev/null @@ -1,322 +0,0 @@ -// Copyright 2018 The gVisor Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package dhcp - -import ( - "context" - "strings" - "testing" - "time" - - "gvisor.googlesource.com/gvisor/pkg/tcpip" - "gvisor.googlesource.com/gvisor/pkg/tcpip/buffer" - "gvisor.googlesource.com/gvisor/pkg/tcpip/link/channel" - "gvisor.googlesource.com/gvisor/pkg/tcpip/link/sniffer" - "gvisor.googlesource.com/gvisor/pkg/tcpip/network/ipv4" - "gvisor.googlesource.com/gvisor/pkg/tcpip/stack" - "gvisor.googlesource.com/gvisor/pkg/tcpip/transport/udp" - "gvisor.googlesource.com/gvisor/pkg/waiter" -) - -const nicid = tcpip.NICID(1) -const serverAddr = tcpip.Address("\xc0\xa8\x03\x01") - -func createStack(t *testing.T) *stack.Stack { - const defaultMTU = 65536 - id, linkEP := channel.New(256, defaultMTU, "") - if testing.Verbose() { - id = sniffer.New(id) - } - - go func() { - for pkt := range linkEP.C { - linkEP.Inject(pkt.Proto, buffer.NewVectorisedView(len(pkt.Header)+len(pkt.Payload), []buffer.View{pkt.Header, pkt.Payload})) - } - }() - - s := stack.New([]string{ipv4.ProtocolName}, []string{udp.ProtocolName}, stack.Options{}) - - if err := s.CreateNIC(nicid, id); err != nil { - t.Fatal(err) - } - if err := s.AddAddress(nicid, ipv4.ProtocolNumber, serverAddr); err != nil { - t.Fatal(err) - } - - s.SetRouteTable([]tcpip.Route{{ - Destination: tcpip.Address(strings.Repeat("\x00", 4)), - Mask: tcpip.AddressMask(strings.Repeat("\x00", 4)), - Gateway: "", - NIC: nicid, - }}) - - return s -} - -func TestDHCP(t *testing.T) { - s := createStack(t) - clientAddrs := []tcpip.Address{"\xc0\xa8\x03\x02", "\xc0\xa8\x03\x03"} - - serverCfg := Config{ - ServerAddress: serverAddr, - SubnetMask: "\xff\xff\xff\x00", - Gateway: "\xc0\xa8\x03\xF0", - DNS: []tcpip.Address{ - "\x08\x08\x08\x08", "\x08\x08\x04\x04", - }, - LeaseLength: 24 * time.Hour, - } - serverCtx, cancel := context.WithCancel(context.Background()) - defer cancel() - _, err := newEPConnServer(serverCtx, s, clientAddrs, serverCfg) - if err != nil { - t.Fatal(err) - } - - const clientLinkAddr0 = tcpip.LinkAddress("\x52\x11\x22\x33\x44\x52") - c0 := NewClient(s, nicid, clientLinkAddr0, nil) - if _, err := c0.Request(context.Background(), ""); err != nil { - t.Fatal(err) - } - if got, want := c0.Address(), clientAddrs[0]; got != want { - t.Errorf("c.Addr()=%s, want=%s", got, want) - } - if _, err := c0.Request(context.Background(), ""); err != nil { - t.Fatal(err) - } - if got, want := c0.Address(), clientAddrs[0]; got != want { - t.Errorf("c.Addr()=%s, want=%s", got, want) - } - - const clientLinkAddr1 = tcpip.LinkAddress("\x52\x11\x22\x33\x44\x53") - c1 := NewClient(s, nicid, clientLinkAddr1, nil) - if _, err := c1.Request(context.Background(), ""); err != nil { - t.Fatal(err) - } - if got, want := c1.Address(), clientAddrs[1]; got != want { - t.Errorf("c.Addr()=%s, want=%s", got, want) - } - - if _, err := c0.Request(context.Background(), ""); err != nil { - t.Fatal(err) - } - if got, want := c0.Address(), clientAddrs[0]; got != want { - t.Errorf("c.Addr()=%s, want=%s", got, want) - } - - if got, want := c0.Config(), serverCfg; !equalConfig(got, want) { - t.Errorf("client config:\n\t%#+v\nwant:\n\t%#+v", got, want) - } -} - -func equalConfig(c0, c1 Config) bool { - if c0.Error != c1.Error || c0.ServerAddress != c1.ServerAddress || c0.SubnetMask != c1.SubnetMask || c0.Gateway != c1.Gateway || c0.LeaseLength != c1.LeaseLength { - return false - } - if len(c0.DNS) != len(c1.DNS) { - return false - } - for i := 0; i < len(c0.DNS); i++ { - if c0.DNS[i] != c1.DNS[i] { - return false - } - } - return true -} - -func TestRenew(t *testing.T) { - s := createStack(t) - clientAddrs := []tcpip.Address{"\xc0\xa8\x03\x02"} - - serverCfg := Config{ - ServerAddress: serverAddr, - SubnetMask: "\xff\xff\xff\x00", - Gateway: "\xc0\xa8\x03\xF0", - DNS: []tcpip.Address{"\x08\x08\x08\x08"}, - LeaseLength: 1 * time.Second, - } - serverCtx, cancel := context.WithCancel(context.Background()) - defer cancel() - _, err := newEPConnServer(serverCtx, s, clientAddrs, serverCfg) - if err != nil { - t.Fatal(err) - } - - count := 0 - var curAddr tcpip.Address - addrCh := make(chan tcpip.Address) - acquiredFunc := func(oldAddr, newAddr tcpip.Address, cfg Config) { - if err := cfg.Error; err != nil { - t.Fatalf("acquisition %d failed: %v", count, err) - } - if oldAddr != curAddr { - t.Fatalf("aquisition %d: curAddr=%v, oldAddr=%v", count, curAddr, oldAddr) - } - if cfg.LeaseLength != time.Second { - t.Fatalf("aquisition %d: lease length: %v, want %v", count, cfg.LeaseLength, time.Second) - } - count++ - curAddr = newAddr - addrCh <- newAddr - } - - clientCtx, cancel := context.WithCancel(context.Background()) - const clientLinkAddr0 = tcpip.LinkAddress("\x52\x11\x22\x33\x44\x52") - c := NewClient(s, nicid, clientLinkAddr0, acquiredFunc) - c.Run(clientCtx) - - var addr tcpip.Address - select { - case addr = <-addrCh: - t.Logf("got first address: %v", addr) - case <-time.After(5 * time.Second): - t.Fatal("timeout acquiring initial address") - } - - select { - case newAddr := <-addrCh: - t.Logf("got renewal: %v", newAddr) - if newAddr != addr { - t.Fatalf("renewal address is %v, want %v", newAddr, addr) - } - case <-time.After(5 * time.Second): - t.Fatal("timeout waiting for address renewal") - } - - cancel() -} - -// Regression test for https://fuchsia.atlassian.net/browse/NET-17 -func TestNoNullTerminator(t *testing.T) { - v := "\x02\x01\x06\x00" + - "\xc8\x37\xbe\x73\x00\x00\x80\x00\x00\x00\x00\x00\xc0\xa8\x2b\x92" + - "\xc0\xa8\x2b\x01\x00\x00\x00\x00\x00\x0f\x60\x0a\x23\x93\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + - "\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63\x35\x01\x02\x36" + - "\x04\xc0\xa8\x2b\x01\x33\x04\x00\x00\x0e\x10\x3a\x04\x00\x00\x07" + - "\x08\x3b\x04\x00\x00\x0c\x4e\x01\x04\xff\xff\xff\x00\x1c\x04\xc0" + - "\xa8\x2b\xff\x03\x04\xc0\xa8\x2b\x01\x06\x04\xc0\xa8\x2b\x01\x2b" + - "\x0f\x41\x4e\x44\x52\x4f\x49\x44\x5f\x4d\x45\x54\x45\x52\x45\x44" + - "\xff" - h := header(v) - if !h.isValid() { - t.Error("failed to decode header") - } - - if got, want := h.op(), opReply; got != want { - t.Errorf("h.op()=%v, want=%v", got, want) - } - - if _, err := h.options(); err != nil { - t.Errorf("bad options: %v", err) - } -} - -func teeConn(c conn) (conn, conn) { - dup1 := &dupConn{ - c: c, - dup: make(chan connMsg, 8), - } - dup2 := &chConn{ - c: c, - ch: dup1.dup, - } - return dup1, dup2 -} - -type connMsg struct { - buf buffer.View - addr tcpip.FullAddress - err error -} - -type dupConn struct { - c conn - dup chan connMsg -} - -func (c *dupConn) Read() (buffer.View, tcpip.FullAddress, error) { - v, addr, err := c.c.Read() - c.dup <- connMsg{v, addr, err} - return v, addr, err -} -func (c *dupConn) Write(b []byte, addr *tcpip.FullAddress) error { return c.c.Write(b, addr) } - -type chConn struct { - ch chan connMsg - c conn -} - -func (c *chConn) Read() (buffer.View, tcpip.FullAddress, error) { - msg := <-c.ch - return msg.buf, msg.addr, msg.err -} -func (c *chConn) Write(b []byte, addr *tcpip.FullAddress) error { return c.c.Write(b, addr) } - -func TestTwoServers(t *testing.T) { - s := createStack(t) - - wq := new(waiter.Queue) - ep, err := s.NewEndpoint(udp.ProtocolNumber, ipv4.ProtocolNumber, wq) - if err != nil { - t.Fatalf("dhcp: server endpoint: %v", err) - } - if err = ep.Bind(tcpip.FullAddress{Port: ServerPort}); err != nil { - t.Fatalf("dhcp: server bind: %v", err) - } - if err = ep.SetSockOpt(tcpip.BroadcastOption(1)); err != nil { - t.Fatalf("dhcp: setsockopt: %v", err) - } - - serverCtx, cancel := context.WithCancel(context.Background()) - defer cancel() - c1, c2 := teeConn(newEPConn(serverCtx, wq, ep)) - - if _, err := NewServer(serverCtx, c1, []tcpip.Address{"\xc0\xa8\x03\x02"}, Config{ - ServerAddress: "\xc0\xa8\x03\x01", - SubnetMask: "\xff\xff\xff\x00", - Gateway: "\xc0\xa8\x03\xF0", - DNS: []tcpip.Address{"\x08\x08\x08\x08"}, - LeaseLength: 30 * time.Minute, - }); err != nil { - t.Fatal(err) - } - if _, err := NewServer(serverCtx, c2, []tcpip.Address{"\xc0\xa8\x04\x02"}, Config{ - ServerAddress: "\xc0\xa8\x04\x01", - SubnetMask: "\xff\xff\xff\x00", - Gateway: "\xc0\xa8\x03\xF0", - DNS: []tcpip.Address{"\x08\x08\x08\x08"}, - LeaseLength: 30 * time.Minute, - }); err != nil { - t.Fatal(err) - } - - const clientLinkAddr0 = tcpip.LinkAddress("\x52\x11\x22\x33\x44\x52") - c := NewClient(s, nicid, clientLinkAddr0, nil) - if _, err := c.Request(context.Background(), ""); err != nil { - t.Fatal(err) - } -} |