mirror of https://github.com/k3s-io/k3s
115 lines
2.8 KiB
Go
115 lines
2.8 KiB
Go
/*
|
|
Copyright 2017 The Kubernetes 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 gce
|
|
|
|
import (
|
|
"net"
|
|
"reflect"
|
|
"testing"
|
|
|
|
compute "google.golang.org/api/compute/v1"
|
|
)
|
|
|
|
func TestLastIPInRange(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
cidr string
|
|
want string
|
|
}{
|
|
{"10.1.2.3/32", "10.1.2.3"},
|
|
{"10.1.2.0/31", "10.1.2.1"},
|
|
{"10.1.0.0/30", "10.1.0.3"},
|
|
{"10.0.0.0/29", "10.0.0.7"},
|
|
{"::0/128", "::"},
|
|
{"::0/127", "::1"},
|
|
{"::0/126", "::3"},
|
|
{"::0/120", "::ff"},
|
|
} {
|
|
_, c, err := net.ParseCIDR(tc.cidr)
|
|
if err != nil {
|
|
t.Errorf("net.ParseCIDR(%v) = _, %v, %v; want nil", tc.cidr, c, err)
|
|
continue
|
|
}
|
|
|
|
if lastIP := lastIPInRange(c); lastIP.String() != tc.want {
|
|
t.Errorf("LastIPInRange(%v) = %v; want %v", tc.cidr, lastIP, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSubnetsInCIDR(t *testing.T) {
|
|
subnets := []*compute.Subnetwork{
|
|
{
|
|
Name: "A",
|
|
IpCidrRange: "10.0.0.0/20",
|
|
},
|
|
{
|
|
Name: "B",
|
|
IpCidrRange: "10.0.16.0/20",
|
|
},
|
|
{
|
|
Name: "C",
|
|
IpCidrRange: "10.132.0.0/20",
|
|
},
|
|
{
|
|
Name: "D",
|
|
IpCidrRange: "10.0.32.0/20",
|
|
},
|
|
{
|
|
Name: "E",
|
|
IpCidrRange: "10.134.0.0/20",
|
|
},
|
|
}
|
|
expectedNames := []string{"C", "E"}
|
|
|
|
gotSubs, err := subnetsInCIDR(subnets, autoSubnetIPRange)
|
|
if err != nil {
|
|
t.Errorf("autoSubnetInList() = _, %v", err)
|
|
}
|
|
|
|
var gotNames []string
|
|
for _, v := range gotSubs {
|
|
gotNames = append(gotNames, v.Name)
|
|
}
|
|
if !reflect.DeepEqual(gotNames, expectedNames) {
|
|
t.Errorf("autoSubnetInList() = %v, expected: %v", gotNames, expectedNames)
|
|
}
|
|
}
|
|
|
|
func TestFirewallToGcloudArgs(t *testing.T) {
|
|
firewall := compute.Firewall{
|
|
Description: "Last Line of Defense",
|
|
TargetTags: []string{"jock-nodes", "band-nodes"},
|
|
SourceRanges: []string{"3.3.3.3/20", "1.1.1.1/20", "2.2.2.2/20"},
|
|
Allowed: []*compute.FirewallAllowed{
|
|
{
|
|
IPProtocol: "udp",
|
|
Ports: []string{"321", "123-456", "123"},
|
|
},
|
|
{
|
|
IPProtocol: "tcp",
|
|
Ports: []string{"321", "123-456", "123"},
|
|
},
|
|
},
|
|
}
|
|
got := firewallToGcloudArgs(&firewall, "my-project")
|
|
|
|
var e = `--description "Last Line of Defense" --allow tcp:123,tcp:123-456,tcp:321,udp:123,udp:123-456,udp:321 --source-ranges 1.1.1.1/20,2.2.2.2/20,3.3.3.3/20 --target-tags band-nodes,jock-nodes --project my-project`
|
|
if got != e {
|
|
t.Errorf("%q does not equal %q", got, e)
|
|
}
|
|
}
|