66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
// Copyright 2018-present the CoreDHCP Authors. All rights reserved
|
|
// This source code is licensed under the MIT license found in the
|
|
// LICENSE file in the root directory of this source tree.
|
|
|
|
package netmask
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/insomniacslk/dhcp/dhcpv4"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestCheckValidNetmask(t *testing.T) {
|
|
assert.True(t, checkValidNetmask(net.IPv4Mask(255, 255, 255, 0)))
|
|
assert.True(t, checkValidNetmask(net.IPv4Mask(255, 255, 0, 0)))
|
|
assert.True(t, checkValidNetmask(net.IPv4Mask(255, 0, 0, 0)))
|
|
assert.True(t, checkValidNetmask(net.IPv4Mask(0, 0, 0, 0)))
|
|
|
|
assert.False(t, checkValidNetmask(net.IPv4Mask(0, 255, 255, 255)))
|
|
assert.False(t, checkValidNetmask(net.IPv4Mask(0, 0, 255, 255)))
|
|
assert.False(t, checkValidNetmask(net.IPv4Mask(0, 0, 0, 255)))
|
|
}
|
|
|
|
func TestHandler4(t *testing.T) {
|
|
// set plugin netmask
|
|
netmask = net.IPv4Mask(255, 255, 255, 0)
|
|
|
|
// prepare DHCPv4 request
|
|
req := &dhcpv4.DHCPv4{}
|
|
resp := &dhcpv4.DHCPv4{
|
|
Options: dhcpv4.Options{},
|
|
}
|
|
|
|
// if we handle this DHCP request, the netmask should be one of the options
|
|
// of the result
|
|
result, stop := Handler4(req, resp)
|
|
assert.Same(t, result, resp)
|
|
assert.False(t, stop)
|
|
assert.EqualValues(t, netmask, resp.Options.Get(dhcpv4.OptionSubnetMask))
|
|
}
|
|
|
|
func TestSetup4(t *testing.T) {
|
|
// valid configuration
|
|
_, err := setup4("255.255.255.0")
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, netmask, net.IPv4Mask(255, 255, 255, 0))
|
|
|
|
// no configuration
|
|
_, err = setup4()
|
|
assert.Error(t, err)
|
|
|
|
// unspecified netmask
|
|
_, err = setup4("0.0.0.0")
|
|
assert.Error(t, err)
|
|
|
|
// ipv6 prefix
|
|
_, err = setup4("ff02::/64")
|
|
assert.Error(t, err)
|
|
|
|
// invalid netmask
|
|
_, err = setup4("0.0.0.255")
|
|
assert.Error(t, err)
|
|
}
|