azure-container-networking/cns/routes/routes_test.go

121 строка
2.5 KiB
Go

// Copyright 2017 Microsoft. All rights reserved.
// MIT License
// +build windows
package routes
import (
"os"
"os/exec"
"testing"
"github.com/Azure/azure-container-networking/log"
)
const (
testDest = "159.254.169.254"
testMask = "255.255.255.255"
testGateway = "0.0.0.0"
testMetric = "12"
)
// Wraps the test run.
func TestMain(m *testing.M) {
// Run tests.
exitCode := m.Run()
os.Exit(exitCode)
}
func addTestRoute() error {
arg := []string{
"/C", "route", "ADD", testDest,
"MASK", testMask, testGateway, "METRIC", testMetric,
}
log.Printf("[Azure CNS] Adding missing route: %v", arg)
c := exec.Command("cmd", arg...)
bytes, err := c.Output()
if err == nil {
log.Printf("[Azure CNS] Successfully executed add route: %v\n%v",
arg, string(bytes))
} else {
log.Printf("[Azure CNS] Failed to execute add route: %v\n%v\n%v",
arg, string(bytes), err.Error())
return err
}
return nil
}
func deleteTestRoute() error {
args := []string{
"/C", "route", "DELETE", testDest, "MASK", testMask,
testGateway, "METRIC", testMetric,
}
log.Printf("[Azure CNS] Deleting route: %v", args)
c := exec.Command("cmd", args...)
bytes, err := c.Output()
if err == nil {
log.Printf("[Azure CNS] Successfully executed delete route: %v\n%v",
args, string(bytes))
} else {
log.Printf("[Azure CNS] Failed to execute delete route: %v\n%v\n%v",
args, string(bytes), err.Error())
return err
}
return nil
}
// TestPutRoutes tests if a missing route is properly restored or not.
func TestRestoreMissingRoute(t *testing.T) {
log.Printf("Test: PutMissingRoutes")
err := addTestRoute()
if err != nil {
t.Errorf("add route failed %+v", err.Error())
}
rt := &RoutingTable{}
// save routing table.
rt.GetRoutingTable()
cntr := 0
for _, rt := range rt.Routes {
log.Printf("[]: Route[%d]: %+v", cntr, rt)
cntr++
}
// now delete the route so it goes missing.
err = deleteTestRoute()
if err != nil {
t.Errorf("delete route failed %+v", err.Error())
}
// now restore the deleted route.
rt.RestoreRoutingTable()
// test if route was resotred or not.
rt.GetRoutingTable()
restored := false
for _, existingRoute := range rt.Routes {
log.Printf("Comapring %+v\n", existingRoute)
if existingRoute.destination == testDest &&
existingRoute.gateway == testGateway &&
existingRoute.mask == testMask {
restored = true
}
}
if !restored {
t.Errorf("unable to restore missing route")
} else {
err = deleteTestRoute()
if err != nil {
t.Errorf("delete route failed %+v", err.Error())
}
}
}