mirror of https://github.com/k3s-io/k3s
190 lines
5.4 KiB
Go
190 lines
5.4 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 testing
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
utilipvs "k8s.io/kubernetes/pkg/util/ipvs"
|
|
)
|
|
|
|
func TestVirtualServer(t *testing.T) {
|
|
// Initialize
|
|
fake := NewFake()
|
|
// Add a virtual server
|
|
vs1 := &utilipvs.VirtualServer{
|
|
Address: net.ParseIP("1.2.3.4"),
|
|
Port: uint16(80),
|
|
Protocol: string("TCP"),
|
|
Flags: utilipvs.FlagHashed,
|
|
}
|
|
err := fake.AddVirtualServer(vs1)
|
|
if err != nil {
|
|
t.Errorf("Fail to add virtual server, error: %v", err)
|
|
}
|
|
// Get a specific virtual server
|
|
got1, err := fake.GetVirtualServer(vs1)
|
|
if err != nil {
|
|
t.Errorf("Fail to get virtual server, error: %v", err)
|
|
}
|
|
if !vs1.Equal(got1) {
|
|
t.Errorf("Expect virtual server: %v, got: %v", vs1, got1)
|
|
}
|
|
// Update virtual server
|
|
vs12 := &utilipvs.VirtualServer{
|
|
Address: net.ParseIP("1.2.3.4"),
|
|
Port: uint16(80),
|
|
Protocol: string("TCP"),
|
|
Flags: utilipvs.FlagPersistent,
|
|
}
|
|
err = fake.UpdateVirtualServer(vs12)
|
|
if err != nil {
|
|
t.Errorf("Fail to update virtual server, error: %v", err)
|
|
}
|
|
// Check the updated virtual server
|
|
got12, err := fake.GetVirtualServer(vs1)
|
|
if !got12.Equal(vs12) {
|
|
t.Errorf("Expect virtual server: %v, got: %v", vs12, got12)
|
|
}
|
|
// Add another virtual server
|
|
vs2 := &utilipvs.VirtualServer{
|
|
Address: net.ParseIP("10::40"),
|
|
Port: uint16(8080),
|
|
Protocol: string("UDP"),
|
|
}
|
|
err = fake.AddVirtualServer(vs2)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error when add virtual server, error: %v", err)
|
|
}
|
|
// Add another virtual server
|
|
vs3 := &utilipvs.VirtualServer{
|
|
Address: net.ParseIP("10::40"),
|
|
Port: uint16(7777),
|
|
Protocol: string("SCTP"),
|
|
}
|
|
err = fake.AddVirtualServer(vs3)
|
|
if err != nil {
|
|
t.Errorf("Unexpected error when add virtual server, error: %v", err)
|
|
}
|
|
// List all virtual servers
|
|
list, err := fake.GetVirtualServers()
|
|
if err != nil {
|
|
t.Errorf("Fail to list virtual servers, error: %v", err)
|
|
}
|
|
if len(list) != 3 {
|
|
t.Errorf("Expect 2 virtual servers, got: %d", len(list))
|
|
}
|
|
// Delete a virtual server
|
|
err = fake.DeleteVirtualServer(vs1)
|
|
if err != nil {
|
|
t.Errorf("Fail to delete virtual server: %v, error: %v", vs1, err)
|
|
}
|
|
// Check the deleted virtual server no longer exists
|
|
got, _ := fake.GetVirtualServer(vs1)
|
|
if got != nil {
|
|
t.Errorf("Expect nil, got: %v", got)
|
|
}
|
|
// Flush all virtual servers
|
|
err = fake.Flush()
|
|
if err != nil {
|
|
t.Errorf("Fail to flush virtual servers, error: %v", err)
|
|
}
|
|
// List all virtual servers
|
|
list, err = fake.GetVirtualServers()
|
|
if err != nil {
|
|
t.Errorf("Fail to list virtual servers, error: %v", err)
|
|
}
|
|
if len(list) != 0 {
|
|
t.Errorf("Expect 0 virtual servers, got: %d", len(list))
|
|
}
|
|
}
|
|
|
|
func TestRealServer(t *testing.T) {
|
|
// Initialize
|
|
fake := NewFake()
|
|
// Add a virtual server
|
|
vs := &utilipvs.VirtualServer{
|
|
Address: net.ParseIP("10.20.30.40"),
|
|
Port: uint16(80),
|
|
Protocol: string("TCP"),
|
|
}
|
|
rss := []*utilipvs.RealServer{
|
|
{Address: net.ParseIP("172.16.2.1"), Port: 8080, Weight: 1},
|
|
{Address: net.ParseIP("172.16.2.2"), Port: 8080, Weight: 2},
|
|
{Address: net.ParseIP("172.16.2.3"), Port: 8080, Weight: 3},
|
|
}
|
|
err := fake.AddVirtualServer(vs)
|
|
if err != nil {
|
|
t.Errorf("Fail to add virtual server, error: %v", err)
|
|
}
|
|
// Add real server to the virtual server
|
|
for i := range rss {
|
|
if err = fake.AddRealServer(vs, rss[i]); err != nil {
|
|
t.Errorf("Fail to add real server, error: %v", err)
|
|
}
|
|
}
|
|
// Delete a real server of the virtual server
|
|
// Make sure any position of the list can be real deleted
|
|
rssLen := len(rss)
|
|
for i := range rss {
|
|
// List all real servers of the virtual server
|
|
list, err := fake.GetRealServers(vs)
|
|
if err != nil {
|
|
t.Errorf("Fail to get real servers of the virtual server, error: %v", err)
|
|
}
|
|
if len(list) != rssLen {
|
|
t.Errorf("Expect %d virtual servers, got: %d", len(rss), len(list))
|
|
}
|
|
rsToDel := list[i]
|
|
if err = fake.DeleteRealServer(vs, rsToDel); err != nil {
|
|
t.Errorf("Fail to delete real server of the virtual server, error: %v", err)
|
|
} else {
|
|
dests, err := fake.GetRealServers(vs)
|
|
if err != nil {
|
|
t.Errorf("Fail to get real servers of the virtual server, error: %v", err)
|
|
}
|
|
for _, dest := range dests {
|
|
if toRealServerKey(dest).String() == toRealServerKey(rsToDel).String() {
|
|
t.Errorf("Expect real server %q be deleted.", rsToDel.String())
|
|
}
|
|
}
|
|
if err = fake.AddRealServer(vs, rsToDel); err != nil {
|
|
t.Errorf("Fail to add real server, error: %v", err)
|
|
}
|
|
}
|
|
}
|
|
// Test delete real server that not exist
|
|
rs := &utilipvs.RealServer{
|
|
Address: net.ParseIP("172.16.2.4"),
|
|
Port: uint16(8080),
|
|
Weight: 1,
|
|
}
|
|
if err = fake.DeleteRealServer(vs, rs); err == nil {
|
|
t.Errorf("Delete real server that not exist, Expect error, got nil")
|
|
}
|
|
// Delete the virtual server
|
|
err = fake.DeleteVirtualServer(vs)
|
|
if err != nil {
|
|
t.Errorf("Fail to delete virtual server, error: %v", err)
|
|
}
|
|
_, err = fake.GetRealServers(vs)
|
|
if err == nil {
|
|
t.Errorf("Expect error, got nil")
|
|
}
|
|
}
|