From: Huifeng Le Date: Tue, 21 Apr 2020 02:26:08 +0000 (+0800) Subject: SDEWAN folder restructure X-Git-Tag: v1.0~36 X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F75%2F3375%2F2;p=icn%2Fsdwan.git SDEWAN folder restructure Restructure sdewan solution folders. Signed-off-by: Huifeng Le Change-Id: I6ac8e1bfc8e92e1bdd36d523ffd048c6c77d4e89 --- diff --git a/README.md b/README.md new file mode 100644 index 0000000..648bd72 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# Akraino ICN SDEWAN solution +A general description can be found at: https://www.linkedin.com/pulse/software-defined-edge-wan-edges-srinivasa-addepalli/ + +* platform +SDEWAN platform features include cnf, cr definition and controller. + +* traffic-hub +traffic-hub's high level design can be found at: https://www.linkedin.com/pulse/software-defined-edge-wan-central-control-traffic-hub-addepalli/ + +* central-controller +central-controller's high level design can be found at: https://www.linkedin.com/pulse/software-defined-edge-wan-central-control-traffic-hub-addepalli/ diff --git a/central-controller/README.md b/central-controller/README.md new file mode 100644 index 0000000..3f46774 --- /dev/null +++ b/central-controller/README.md @@ -0,0 +1 @@ +# Akraino ICN SDEWAN central controller diff --git a/cnf/test/openwrtclient_fw_test.go b/cnf/test/openwrtclient_fw_test.go deleted file mode 100644 index e692e61..0000000 --- a/cnf/test/openwrtclient_fw_test.go +++ /dev/null @@ -1,1138 +0,0 @@ -package openwrt - -import ( - "openwrt" - "reflect" - "testing" - "flag" - "encoding/json" - "fmt" - "os" -) - -var fw openwrt.FirewallClient -var available_zone_1 string -var available_zone_2 string - -func TestMain(m *testing.M) { - servIp := flag.String("ip", "10.244.0.18", "SDEWAN CNF Management IP Address") - flag.Parse() - - client := openwrt.NewOpenwrtClient(*servIp, "root", "") - fw = openwrt.FirewallClient{client} - available_zone_1 = "wan" - available_zone_2 = "lan" - - os.Exit(m.Run()) -} - -// Error handler -func handleError(t *testing.T, err error, name string, expectedErr bool, errorCode int) { - if (err != nil) { - if (expectedErr) { - switch err.(type) { - case *openwrt.OpenwrtError: - if(errorCode != err.(*openwrt.OpenwrtError).Code) { - t.Errorf("Test case '%s': expected '%d', but got '%d'", name, errorCode, err.(*openwrt.OpenwrtError).Code) - } else { - fmt.Printf("%s\n", err.(*openwrt.OpenwrtError).Message) - } - default: - t.Errorf("Test case '%s': expected openwrt.OpenwrtError, but got '%s'", name, reflect.TypeOf(err).String()) - } - } else { - t.Errorf("Test case '%s': expected success, but got '%s'", name, reflect.TypeOf(err).String()) - } - } else { - if (expectedErr) { - t.Errorf("Test case '%s': expected error code '%d', but success", name, errorCode) - } - } -} - -func printError(err error) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("%s\n", err.(*openwrt.OpenwrtError).Message) - default: - fmt.Printf("%s\n", reflect.TypeOf(err).String()) - } -} - -// Firewall Zone API Test -func TestGetZones(t *testing.T) { - res, err := fw.GetZones() - if res == nil { - printError(err) - t.Errorf("Test case GetZones: can not get firewall zones") - return - } - - if len(res.Zones) == 0 { - fmt.Printf("Test case GetZones: no zone defined") - return - } - - p_data, _ := json.Marshal(res) - fmt.Printf("%s\n", string(p_data)) -} - -func TestGetZone(t *testing.T) { - tcases := []struct { - name string - zone string - expectedErr bool - expectedErrCode int - }{ - { - name: "GetAvailableZone", - zone: available_zone_1, - }, - { - name: "GetFoolRule", - zone: "foo_zone", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := fw.GetZone(tcase.zone) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestCreateFoolZone(t *testing.T) { - tcases := []struct { - name string - zone openwrt.SdewanFirewallZone - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - zone: openwrt.SdewanFirewallZone{Name:" "}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidNetwork", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", Network:[]string{"fool_name"}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidMasq", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", Masq:"2"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidMasqSrc", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", MasqSrc:[]string{"256.0.0.0/0"}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidMasqDest", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", MasqDest:[]string{"256.0.0.0/0"}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidMasqAllowInvalid", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", MasqAllowInvalid:"2"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidMtuFix", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", MtuFix:"2"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidInput", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", Input:"FOOL"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidForward", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", Forward:"FOOL"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidOutput", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", Output:"FOOL"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidFamily", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", Family:"FOOL"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidSubnet", - zone: openwrt.SdewanFirewallZone{Name:"test_zone", Subnet:[]string{"256.0.0.0/0"}}, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - _, err := fw.CreateZone(tcase.zone) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteFoolZone(t *testing.T) { - tcases := []struct { - name string - zone string - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - zone: "", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolName", - zone: "fool_name", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - err := fw.DeleteZone(tcase.zone) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteAvailableZone(t *testing.T) { - var err error - var zone_name = "test_zone_1" - var redirect_name = "test_redirect_1" - var zone = openwrt.SdewanFirewallZone{Name:zone_name, Network:[]string{"wan", "lan"}, Input:"REJECT", Masq:"1"} - var redirect = openwrt.SdewanFirewallRedirect{Name:redirect_name, Src:zone_name, SrcDPort:"22000", Dest:"lan", DestPort:"22", Proto:"tcp", Target:"DNAT"} - - // create zone - _, err = fw.GetZone(zone_name) - if (err == nil) { - err = fw.DeleteZone(zone_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestDeleteAvailableZone: failed to delete zone '%s'", zone_name) - return - } - } - - _, err = fw.CreateZone(zone) - if (err != nil) { - printError(err) - t.Errorf("Test case TestDeleteAvailableZone: failed to create zone '%s'", zone_name) - return - } - - // create redirect - _, err = fw.GetRedirect(redirect_name) - if (err == nil) { - err = fw.DeleteRedirect(redirect_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestDeleteAvailableZone: failed to delete redirect '%s'", redirect_name) - return - } - } - - _, err = fw.CreateRedirect(redirect) - if (err != nil) { - printError(err) - t.Errorf("Test case TestDeleteAvailableZone: failed to create redirect '%s'", redirect_name) - return - } - - // try to delete a used zone - err = fw.DeleteZone(zone_name) - if (err != nil) { - printError(err) - } else { - t.Errorf("Test case TestDeleteAvailableZone: error to delete zone '%s'", zone_name) - return - } - - // clean - err = fw.DeleteRedirect(redirect_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestDeleteAvailableZone: failed to delete redirect '%s'", redirect_name) - return - } - - err = fw.DeleteZone(zone_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestDeleteAvailableZone: failed to delete zone '%s'", zone_name) - return - } -} - -func TestUpdateFoolZone(t *testing.T) { - tcases := []struct { - name string - zone openwrt.SdewanFirewallZone - expectedErr bool - expectedErrCode int - }{ - { - name: "FoolName", - zone: openwrt.SdewanFirewallZone{Name:"fool_name"}, - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := fw.UpdateZone(tcase.zone) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestZone(t *testing.T) { - var err error - var ret_zone *openwrt.SdewanFirewallZone - - var zone_name = "test_zone" - var zone = openwrt.SdewanFirewallZone{Name:zone_name, Network:[]string{"wan", "lan"}, Input:"REJECT", Masq:"1"} - var update_zone = openwrt.SdewanFirewallZone{Name:zone_name, Network:[]string{"lan"}, Input:"ACCEPT", MasqSrc:[]string{"!0.0.0.0/0", "172.16.1.1"}, Subnet:[]string{"172.16.0.1/24"}} - - _, err = fw.GetZone(zone_name) - if (err == nil) { - err = fw.DeleteZone(zone_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestZone: failed to delete zone '%s'", zone_name) - return - } - } - - // Create zone - ret_zone, err = fw.CreateZone(zone) - if (err != nil) { - printError(err) - t.Errorf("Test case TestZone: failed to create zone '%s'", zone_name) - return - } else { - p_data, _ := json.Marshal(ret_zone) - fmt.Printf("Created Zone: %s\n", string(p_data)) - } - - ret_zone, err = fw.GetZone(zone_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestZone: failed to get created zone") - return - } else { - if( ret_zone.Input != "REJECT" ) { - t.Errorf("Test case TestZone: failed to create zone") - return - } - } - - // Update zone - ret_zone, err = fw.UpdateZone(update_zone) - if (err != nil) { - printError(err) - t.Errorf("Test case TestZone: failed to update zone '%s'", zone_name) - return - } else { - p_data, _ := json.Marshal(ret_zone) - fmt.Printf("Updated Zone: %s\n", string(p_data)) - } - - ret_zone, err = fw.GetZone(zone_name) - if (err != nil) { - t.Errorf("Test case TestZone: failed to get updated zone") - return - } else { - if( ret_zone.Input != "ACCEPT" ) { - t.Errorf("Test case TestZone: failed to update zone") - return - } - } - - // Delete zone - err = fw.DeleteZone(zone_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestZone: failed to delete zone '%s'", zone_name) - return - } - - ret_zone, err = fw.GetZone(zone_name) - if (err == nil) { - t.Errorf("Test case TestZone: failed to delete zone") - return - } -} - -// Firewall Forwarding API Test -func TestGetForwardings(t *testing.T) { - res, err := fw.GetForwardings() - if res == nil { - printError(err) - t.Errorf("Test case GetForwardings: can not get firewall forwardings") - return - } - - if len(res.Forwardings) == 0 { - fmt.Printf("Test case GetForwardings: no forwarding defined") - return - } - - p_data, _ := json.Marshal(res) - fmt.Printf("%s\n", string(p_data)) -} - -func TestGetForwarding(t *testing.T) { - tcases := []struct { - name string - forwarding string - expectedErr bool - expectedErrCode int - }{ - { - name: "GetFoolForwarding", - forwarding: "foo_forwarding", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := fw.GetForwarding(tcase.forwarding) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestCreateFoolForwarding(t *testing.T) { - tcases := []struct { - name string - forwarding openwrt.SdewanFirewallForwarding - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - forwarding: openwrt.SdewanFirewallForwarding{Name:" "}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "NoSrc", - forwarding: openwrt.SdewanFirewallForwarding{Name:"test_forwarding", Dest: available_zone_1}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidSrc", - forwarding: openwrt.SdewanFirewallForwarding{Name:"test_forwarding", Src:"fool_zone", Dest: available_zone_1}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "NoDest", - forwarding: openwrt.SdewanFirewallForwarding{Name:"test_forwarding", Src: available_zone_1}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidDest", - forwarding: openwrt.SdewanFirewallForwarding{Name:"test_forwarding", Src:available_zone_1, Dest:"fool_zone"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidFamily", - forwarding: openwrt.SdewanFirewallForwarding{Name:"test_forwarding", Family:"fool_family", Src:available_zone_1, Dest:available_zone_2}, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - _, err := fw.CreateForwarding(tcase.forwarding) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteFoolForwarding(t *testing.T) { - tcases := []struct { - name string - forwarding string - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - forwarding: "", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolName", - forwarding: "fool_name", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - err := fw.DeleteForwarding(tcase.forwarding) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestUpdateFoolForwarding(t *testing.T) { - tcases := []struct { - name string - forwarding openwrt.SdewanFirewallForwarding - expectedErr bool - expectedErrCode int - }{ - { - name: "FoolName", - forwarding: openwrt.SdewanFirewallForwarding{Name:"fool_name", Src:available_zone_1, Dest:available_zone_2}, - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := fw.UpdateForwarding(tcase.forwarding) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestForwarding(t *testing.T) { - var err error - var ret_forwarding *openwrt.SdewanFirewallForwarding - - var forwarding_name = "test_forwarding" - var forwarding = openwrt.SdewanFirewallForwarding{Name:forwarding_name, Src:available_zone_1, Dest:available_zone_2} - var update_forwarding = openwrt.SdewanFirewallForwarding{Name:forwarding_name, Src:available_zone_2, Dest:available_zone_1} - - _, err = fw.GetForwarding(forwarding_name) - if (err == nil) { - err = fw.DeleteForwarding(forwarding_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestForwarding: failed to delete forwarding '%s'", forwarding_name) - return - } - } - - // Create forwarding - ret_forwarding, err = fw.CreateForwarding(forwarding) - if (err != nil) { - printError(err) - t.Errorf("Test case TestForwarding: failed to create forwarding '%s'", forwarding_name) - return - } else { - p_data, _ := json.Marshal(ret_forwarding) - fmt.Printf("Created Forwarding: %s\n", string(p_data)) - } - - ret_forwarding, err = fw.GetForwarding(forwarding_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestForwarding: failed to get created forwarding") - return - } else { - if( ret_forwarding.Dest != available_zone_2 ) { - t.Errorf("Test case TestForwarding: failed to create forwarding") - return - } - } - - // Update forwarding - ret_forwarding, err = fw.UpdateForwarding(update_forwarding) - if (err != nil) { - printError(err) - t.Errorf("Test case TestForwarding: failed to update forwarding '%s'", forwarding_name) - return - } else { - p_data, _ := json.Marshal(ret_forwarding) - fmt.Printf("Updated Forwarding: %s\n", string(p_data)) - } - - ret_forwarding, err = fw.GetForwarding(forwarding_name) - if (err != nil) { - t.Errorf("Test case TestForwarding: failed to get updated forwarding") - return - } else { - if( ret_forwarding.Dest != available_zone_1 ) { - t.Errorf("Test case TestForwarding: failed to update forwarding") - return - } - } - - // Delete forwarding - err = fw.DeleteForwarding(forwarding_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestForwarding: failed to delete forwarding '%s'", forwarding_name) - return - } - - ret_forwarding, err = fw.GetForwarding(forwarding_name) - if (err == nil) { - t.Errorf("Test case TestForwarding: failed to delete forwarding") - return - } -} - -// Firewall Redirect API Test -func TestGetRedirects(t *testing.T) { - res, err := fw.GetRedirects() - if res == nil { - printError(err) - t.Errorf("Test case GetRedirects: can not get firewall redirects") - return - } - - if len(res.Redirects) == 0 { - fmt.Printf("Test case GetRedirects: no redirect defined") - return - } - - p_data, _ := json.Marshal(res) - fmt.Printf("%s\n", string(p_data)) -} - -func TestGetRedirect(t *testing.T) { - tcases := []struct { - name string - redirect string - expectedErr bool - expectedErrCode int - }{ - { - name: "GetFoolRedirect", - redirect: "foo_redirect", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := fw.GetRedirect(tcase.redirect) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestCreateFoolRedirect(t *testing.T) { - tcases := []struct { - name string - redirect openwrt.SdewanFirewallRedirect - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - redirect: openwrt.SdewanFirewallRedirect{Name:" "}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "No Src for DNAT", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", Dest:available_zone_2, DestPort:"22", Proto:"tcp", Target:"DNAT"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "No SrcDIp for SNAT", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", Dest:available_zone_2, DestPort:"22", Proto:"tcp", Target:"SNAT"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "No Dest for SNAT", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", SrcDIp:"192.168.1.1", DestPort:"22", Proto:"tcp", Target:"SNAT"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Src", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", Src:"fool_zone"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid SrcIp", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", SrcIp:"192.168.1.300"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid SrcDIp", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", SrcDIp:"192.168.1.300"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid SrcMac", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", SrcMac:"00:00"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid SrcPort", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", SrcPort:"1a"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid SrcDPort", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", SrcDPort:"1a"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Proto", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", Proto:"fool_protocol"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Dest", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", Dest:"fool_zone"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid DestIp", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", DestIp:"192.168.1a.1"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid DestPort", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", DestPort:"0"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Target", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", Target:"fool_NAT"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Family", - redirect: openwrt.SdewanFirewallRedirect{Name:"test_redirect", Family:"fool_family"}, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - _, err := fw.CreateRedirect(tcase.redirect) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteFoolRedirect(t *testing.T) { - tcases := []struct { - name string - redirect string - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - redirect: "", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolName", - redirect: "fool_name", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - err := fw.DeleteRedirect(tcase.redirect) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestUpdateFoolRedirect(t *testing.T) { - tcases := []struct { - name string - redirect openwrt.SdewanFirewallRedirect - expectedErr bool - expectedErrCode int - }{ - { - name: "FoolName", - redirect: openwrt.SdewanFirewallRedirect{Name:"fool_name", Src:available_zone_1, SrcDPort:"22000", Dest:available_zone_2, DestPort:"22", Proto:"tcp", Target:"DNAT"}, - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := fw.UpdateRedirect(tcase.redirect) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestRedirect(t *testing.T) { - var err error - var ret_redirect *openwrt.SdewanFirewallRedirect - - var redirect_name = "test_redirect" - var redirect = openwrt.SdewanFirewallRedirect{Name:redirect_name, Src:available_zone_1, SrcDPort:"22000", Dest:available_zone_2, DestPort:"22", Proto:"tcp", Target:"DNAT"} - var update_redirect = openwrt.SdewanFirewallRedirect{Name:redirect_name, Src:available_zone_1, SrcDPort:"22001", Dest:available_zone_2, DestPort:"22", Proto:"tcp", Target:"DNAT"} - - _, err = fw.GetRedirect(redirect_name) - if (err == nil) { - err = fw.DeleteRedirect(redirect_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRedirect: failed to delete redirect '%s'", redirect_name) - return - } - } - - // Create redirect - ret_redirect, err = fw.CreateRedirect(redirect) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRedirect: failed to create redirect '%s'", redirect_name) - return - } else { - p_data, _ := json.Marshal(ret_redirect) - fmt.Printf("Created Redirect: %s\n", string(p_data)) - } - - ret_redirect, err = fw.GetRedirect(redirect_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRedirect: failed to get created redirect") - return - } else { - if( ret_redirect.SrcDPort != "22000" ) { - t.Errorf("Test case TestRedirect: failed to create redirect") - return - } - } - - // Update redirect - ret_redirect, err = fw.UpdateRedirect(update_redirect) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRedirect: failed to update redirect '%s'", redirect_name) - return - } else { - p_data, _ := json.Marshal(ret_redirect) - fmt.Printf("Updated Redirect: %s\n", string(p_data)) - } - - ret_redirect, err = fw.GetRedirect(redirect_name) - if (err != nil) { - t.Errorf("Test case TestRedirect: failed to get updated redirect") - return - } else { - if( ret_redirect.SrcDPort != "22001" ) { - t.Errorf("Test case TestRedirect: failed to update redirect") - return - } - } - - // Delete redirect - err = fw.DeleteRedirect(redirect_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRedirect: failed to delete redirect '%s'", redirect_name) - return - } - - ret_redirect, err = fw.GetRedirect(redirect_name) - if (err == nil) { - t.Errorf("Test case TestRedirect: failed to delete redirect") - return - } -} - -// Firewall Rule API Test -func TestGetRules(t *testing.T) { - res, err := fw.GetRules() - if res == nil { - printError(err) - t.Errorf("Test case GetRules: can not get firewall rules") - return - } - - if len(res.Rules) == 0 { - fmt.Printf("Test case GetRules: no rule defined") - return - } - - p_data, _ := json.Marshal(res) - fmt.Printf("%s\n", string(p_data)) -} - -func TestGetRule(t *testing.T) { - tcases := []struct { - name string - rule string - expectedErr bool - expectedErrCode int - }{ - { - name: "GetFoolRule", - rule: "foo_rule", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := fw.GetRule(tcase.rule) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestCreateFoolRule(t *testing.T) { - tcases := []struct { - name string - rule openwrt.SdewanFirewallRule - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - rule: openwrt.SdewanFirewallRule{Name:" "}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "No SetMark and SetXmark for DNAT", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", Target:"MARK"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid SRC", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", Src:"fool_zone"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid SrcIp", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", SrcIp:"191.11.aa.10"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Valid SrcMac", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", SrcMac:"01:02:a0:0F:aC:EE"}, - }, - { - name: "Invalid SrcMac", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", SrcMac:"11:rt:00:00:00:00"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid SrcPort", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", SrcPort:"0"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Proto", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", Proto:"fool_proto"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid IcmpType", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", IcmpType:[]string{"network-unreachable", "address-mask-reply", "fool_icmp_type"}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Dest", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", Dest:"fool_zone"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid DestIp", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", DestIp:"192.168.1.2.1"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid DestPort", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", DestPort:"aa"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Target", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", Target:"fool_target"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Invalid Family", - rule: openwrt.SdewanFirewallRule{Name:"test_rule", Family:"fool_family"}, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - _, err := fw.CreateRule(tcase.rule) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteFoolRule(t *testing.T) { - tcases := []struct { - name string - rule string - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - rule: "", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolName", - rule: "fool_name", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - err := fw.DeleteRule(tcase.rule) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestUpdateFoolRule(t *testing.T) { - tcases := []struct { - name string - rule openwrt.SdewanFirewallRule - expectedErr bool - expectedErrCode int - }{ - { - name: "FoolName", - rule: openwrt.SdewanFirewallRule{Name:"fool_name", Src:available_zone_1, Proto:"udp", DestPort:"68", Target:"REJECT", Family:"ipv4"}, - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := fw.UpdateRule(tcase.rule) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestRule(t *testing.T) { - var err error - var ret_rule *openwrt.SdewanFirewallRule - - var rule_name = "test_rule" - var rule = openwrt.SdewanFirewallRule{Name:rule_name, Src:available_zone_1, Proto:"udp", DestPort:"68", Target:"REJECT", Family:"ipv4"} - var update_rule = openwrt.SdewanFirewallRule{Name:rule_name, Src:available_zone_1, IcmpType:[]string{"host-redirect", "echo-request"}, Proto:"udp", DestPort:"68", Target:"ACCEPT", Family:"ipv4"} - - _, err = fw.GetRule(rule_name) - if (err == nil) { - err = fw.DeleteRule(rule_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to delete rule '%s'", rule_name) - return - } - } - - // Create rule - ret_rule, err = fw.CreateRule(rule) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to create rule '%s'", rule_name) - return - } else { - p_data, _ := json.Marshal(ret_rule) - fmt.Printf("Created Rule: %s\n", string(p_data)) - } - - ret_rule, err = fw.GetRule(rule_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to get created rule") - return - } else { - if( ret_rule.Target != "REJECT" ) { - t.Errorf("Test case TestRule: failed to create rule") - return - } - } - - // Update rule - ret_rule, err = fw.UpdateRule(update_rule) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to update rule '%s'", rule_name) - return - } else { - p_data, _ := json.Marshal(ret_rule) - fmt.Printf("Updated Rule: %s\n", string(p_data)) - } - - ret_rule, err = fw.GetRule(rule_name) - if (err != nil) { - t.Errorf("Test case TestRule: failed to get updated rule") - return - } else { - if( ret_rule.Target != "ACCEPT" ) { - t.Errorf("Test case TestRule: failed to update rule") - return - } - } - - // Delete rule - err = fw.DeleteRule(rule_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to delete rule '%s'", rule_name) - return - } - - ret_rule, err = fw.GetRule(rule_name) - if (err == nil) { - t.Errorf("Test case TestRule: failed to delete rule") - return - } -} diff --git a/cnf/test/openwrtclient_ipsec_test.go b/cnf/test/openwrtclient_ipsec_test.go deleted file mode 100644 index 5500e30..0000000 --- a/cnf/test/openwrtclient_ipsec_test.go +++ /dev/null @@ -1,605 +0,0 @@ -package openwrt - -import ( - "openwrt" - "reflect" - "testing" - "flag" - "encoding/json" - "fmt" - "os" -) - -var ic openwrt.IpsecClient -var available_proposal_1 string -var available_proposal_2 string -var available_site string - -func TestMain(m *testing.M) { - servIp := flag.String("ip", "10.244.0.18", "SDEWAN CNF Management IP Address") - flag.Parse() - - var err error - client := openwrt.NewOpenwrtClient(*servIp, "root", "") - ic = openwrt.IpsecClient{client} - available_proposal_1 = "test_proposal1" - available_proposal_2 = "test_proposal2" - available_site = "test_default_site" - - // create default proposals - var proposall = openwrt.SdewanIpsecProposal{Name:available_proposal_1, EncryptionAlgorithm:"aes128", HashAlgorithm:"sha256", DhGroup:"modp3072",} - var proposal2 = openwrt.SdewanIpsecProposal{Name:available_proposal_2, EncryptionAlgorithm:"aes256", HashAlgorithm:"sha128", DhGroup:"modp4096",} - - _, err = ic.GetProposal(available_proposal_1) - if (err != nil) { - // Create proposal - _, err = ic.CreateProposal(proposall) - if (err != nil) { - printError(err) - return - } - } - - _, err = ic.GetProposal(available_proposal_2) - if (err != nil) { - // Create proposal - _, err = ic.CreateProposal(proposal2) - if (err != nil) { - printError(err) - return - } - } - - // create default site - var site = openwrt.SdewanIpsecSite{ - Name:available_site, - Gateway:"10.0.1.2", - PreSharedKey:"test_key", - AuthenticationMethod:"psk", - LocalIdentifier:"C=CH, O=strongSwan, CN=peer", - RemoteIdentifier:"C=CH, O=strongSwan, CN=peerB", - ForceCryptoProposal:"true", - LocalPublicCert:"public cert\npublic cert value", - CryptoProposal:[]string{available_proposal_1}, - Connections:[]openwrt.SdewanIpsecConnection{{ - Name:available_site+"_conn", - Type:"tunnel", - Mode:"start", - LocalSubnet:"192.168.1.1/24", - LocalSourceip:"10.0.1.1", - RemoteSubnet:"192.168.0.1/24", - RemoteSourceip:"10.0.1.2", - CryptoProposal:[]string{available_proposal_1, available_proposal_2}, - }, - }, - } - - _, err = ic.GetSite(available_site) - if (err == nil) { - // Update site - _, err = ic.UpdateSite(site) - if (err != nil) { - printError(err) - return - } - } else { - // Create site - _, err = ic.CreateSite(site) - if (err != nil) { - printError(err) - return - } - } - - var ret = m.Run() - - // clean - ic.DeleteSite(available_site) - ic.DeleteProposal(available_proposal_1) - ic.DeleteProposal(available_proposal_2) - - os.Exit(ret) -} - -// Error handler -func handleError(t *testing.T, err error, name string, expectedErr bool, errorCode int) { - if (err != nil) { - if (expectedErr) { - switch err.(type) { - case *openwrt.OpenwrtError: - if(errorCode != err.(*openwrt.OpenwrtError).Code) { - t.Errorf("Test case '%s': expected '%d', but got '%d'", name, errorCode, err.(*openwrt.OpenwrtError).Code) - } else { - fmt.Printf("%s\n", err.(*openwrt.OpenwrtError).Message) - } - default: - t.Errorf("Test case '%s': expected openwrt.OpenwrtError, but got '%s'", name, reflect.TypeOf(err).String()) - } - } else { - t.Errorf("Test case '%s': expected success, but got '%s'", name, reflect.TypeOf(err).String()) - } - } else { - if (expectedErr) { - t.Errorf("Test case '%s': expected error code '%d', but success", name, errorCode) - } - } -} - -func printError(err error) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("%s\n", err.(*openwrt.OpenwrtError).Message) - default: - fmt.Printf("%s\n", reflect.TypeOf(err).String()) - } -} - -// IpSec Site API Test -func TestGetSites(t *testing.T) { - res, err := ic.GetSites() - if res == nil { - printError(err) - t.Errorf("Test case GetSites: can not get IpSec sites") - return - } - - if len(res.Sites) == 0 { - fmt.Printf("Test case GetSites: no site found") - return - } - - p_data, _ := json.Marshal(res) - fmt.Printf("%s\n", string(p_data)) -} - -func TestGetSite(t *testing.T) { - tcases := []struct { - name string - site string - expectedErr bool - expectedErrCode int - }{ - { - name: "GetAvailableSite", - site: available_site, - }, - { - name: "GetFoolSite", - site: "foo_site", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := ic.GetSite(tcase.site) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestCreateFoolSite(t *testing.T) { - tcases := []struct { - name string - site openwrt.SdewanIpsecSite - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - site: openwrt.SdewanIpsecSite{Name:" "}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidConnectionType", - site: openwrt.SdewanIpsecSite{Name:"test_site", - Connections:[]openwrt.SdewanIpsecConnection{{Name:"test_connection_name", Type:"fool_type",},},}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidCryptoProtocolInConnection", - site: openwrt.SdewanIpsecSite{Name:"test_site", - Connections:[]openwrt.SdewanIpsecConnection{{Name:"test_connection_name", Type:"tunnel", CryptoProposal:[]string{available_proposal_1, "fool_protocol"}},},}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "InvalidCryptoProtocolInSite", - site: openwrt.SdewanIpsecSite{Name:"test_site", CryptoProposal:[]string{available_proposal_1, "fool_protocol"},}, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - _, err := ic.CreateSite(tcase.site) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteFoolSite(t *testing.T) { - tcases := []struct { - name string - site string - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - site: "", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolName", - site: "fool_name", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - err := ic.DeleteSite(tcase.site) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestUpdateFoolSite(t *testing.T) { - tcases := []struct { - name string - site openwrt.SdewanIpsecSite - expectedErr bool - expectedErrCode int - }{ - { - name: "FoolName", - site: openwrt.SdewanIpsecSite{Name:"fool_name"}, - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := ic.UpdateSite(tcase.site) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestSite(t *testing.T) { - var err error - var ret_site *openwrt.SdewanIpsecSite - - var site_name = "test_site" - var conn_name1 = "test_name1" - var conn_name2 = "test_name2" - var conn_name3 = "test_name3" - var site = openwrt.SdewanIpsecSite{ - Name:site_name, - Gateway:"10.0.1.2", - PreSharedKey:"test_key", - AuthenticationMethod:"psk", - LocalIdentifier:"C=CH, O=strongSwan, CN=peer", - RemoteIdentifier:"C=CH, O=strongSwan, CN=peerB", - ForceCryptoProposal:"true", - CryptoProposal:[]string{available_proposal_1}, - Connections:[]openwrt.SdewanIpsecConnection{{ - Name:conn_name1, - Type:"tunnel", - Mode:"start", - LocalSubnet:"192.168.1.1/24", - LocalSourceip:"10.0.1.1", - RemoteSubnet:"192.168.0.1/24", - RemoteSourceip:"10.0.1.2", - CryptoProposal:[]string{available_proposal_1, available_proposal_2}, - }, - }, - } - - var update_site = openwrt.SdewanIpsecSite{ - Name:site_name, - Gateway:"10.0.21.2", - PreSharedKey:"test_key_2", - AuthenticationMethod:"psk", - LocalIdentifier:"C=CH, O=strongSwan, CN=peer", - RemoteIdentifier:"C=CH, O=strongSwan, CN=peerB", - ForceCryptoProposal:"true", - CryptoProposal:[]string{available_proposal_1, available_proposal_2}, - Connections:[]openwrt.SdewanIpsecConnection{{ - Name:conn_name1, - Type:"tunnel", - Mode:"start", - LocalSubnet:"192.168.21.1/24", - LocalSourceip:"10.0.1.1", - RemoteSubnet:"192.168.0.1/24", - RemoteSourceip:"10.0.21.2", - CryptoProposal:[]string{available_proposal_2}, - }, - { - Name:conn_name2, - Type:"transport", - Mode:"start", - LocalSubnet:"192.168.31.1/24", - LocalSourceip:"10.0.11.1", - RemoteSubnet:"192.168.10.1/24", - RemoteSourceip:"10.0.31.2", - CryptoProposal:[]string{available_proposal_1, available_proposal_2}, - }, - { - Name:conn_name3, - Type:"tunnel", - Mode:"start", - LocalSubnet:"192.168.41.1/24", - LocalSourceip:"10.0.11.1", - RemoteSubnet:"192.168.10.1/24", - RemoteSourceip:"10.0.41.2", - CryptoProposal:[]string{available_proposal_1}, - }, - }, - } - - _, err = ic.GetSite(site_name) - if (err == nil) { - err = ic.DeleteSite(site_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestSite: failed to delete site '%s'", site_name) - return - } - } - - // Create site - ret_site, err = ic.CreateSite(site) - if (err != nil) { - printError(err) - t.Errorf("Test case TestSite: failed to create site '%s'", site_name) - return - } else { - p_data, _ := json.Marshal(ret_site) - fmt.Printf("Created Site: %s\n", string(p_data)) - } - - ret_site, err = ic.GetSite(site_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestSite: failed to get created site") - return - } else { - if( len(ret_site.Connections) != 1 || ret_site.Connections[0].LocalSubnet != "192.168.1.1/24" ) { - t.Errorf("Test case TestSite: failed to create site") - return - } - } - - // Update site - ret_site, err = ic.UpdateSite(update_site) - if (err != nil) { - printError(err) - t.Errorf("Test case TestSite: failed to update site '%s'", site_name) - return - } else { - p_data, _ := json.Marshal(ret_site) - fmt.Printf("Updated Site: %s\n", string(p_data)) - } - - ret_site, err = ic.GetSite(site_name) - if (err != nil) { - t.Errorf("Test case TestSite: failed to get updated site") - return - } else { - if( len(ret_site.Connections) != 3 || ret_site.Connections[0].LocalSubnet != "192.168.21.1/24" ) { - t.Errorf("Test case TestSite: failed to update site") - return - } - } - - // Delete site - err = ic.DeleteSite(site_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestSite: failed to delete site '%s'", site_name) - return - } - - ret_site, err = ic.GetSite(site_name) - if (err == nil) { - t.Errorf("Test case TestSite: failed to delete site") - return - } -} - -// IpSec Proposal API Test -func TestGetProposals(t *testing.T) { - res, err := ic.GetProposals() - if res == nil { - printError(err) - t.Errorf("Test case TestGetProposals: can not get IpSec proposals") - return - } - - if len(res.Proposals) == 0 { - fmt.Printf("Test case TestGetProposals: no proposal found") - return - } - - p_data, _ := json.Marshal(res) - fmt.Printf("%s\n", string(p_data)) -} - -func TestGetProposal(t *testing.T) { - tcases := []struct { - name string - proposal string - expectedErr bool - expectedErrCode int - }{ - { - name: "GetAvailableProposal", - proposal: available_proposal_1, - }, - { - name: "GetFoolProposal", - proposal: "foo_proposal", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := ic.GetProposal(tcase.proposal) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestCreateFoolProposal(t *testing.T) { - tcases := []struct { - name string - proposal openwrt.SdewanIpsecProposal - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - proposal: openwrt.SdewanIpsecProposal{Name:" "}, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - _, err := ic.CreateProposal(tcase.proposal) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteFoolProposal(t *testing.T) { - tcases := []struct { - name string - proposal string - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - proposal: "", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "DeleteInUsedProposal", - proposal: available_proposal_1, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolName", - proposal: "fool_name", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - err := ic.DeleteProposal(tcase.proposal) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestUpdateFoolProposal(t *testing.T) { - tcases := []struct { - name string - proposal openwrt.SdewanIpsecProposal - expectedErr bool - expectedErrCode int - }{ - { - name: "FoolName", - proposal: openwrt.SdewanIpsecProposal{Name:"fool_name"}, - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := ic.UpdateProposal(tcase.proposal) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestProposal(t *testing.T) { - var err error - var ret_proposal *openwrt.SdewanIpsecProposal - - var proposal_name = "test_proposal" - var proposal = openwrt.SdewanIpsecProposal{Name:proposal_name,EncryptionAlgorithm:"aes128", HashAlgorithm:"sha256", DhGroup:"modp3072",} - var update_proposal = openwrt.SdewanIpsecProposal{Name:proposal_name,EncryptionAlgorithm:"aes256", HashAlgorithm:"sha128", DhGroup:"modp3072",} - - _, err = ic.GetProposal(proposal_name) - if (err == nil) { - err = ic.DeleteProposal(proposal_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestProposal: failed to delete proposal '%s'", proposal_name) - return - } - } - - // Create proposal - ret_proposal, err = ic.CreateProposal(proposal) - if (err != nil) { - printError(err) - t.Errorf("Test case TestProposal: failed to create proposal '%s'", proposal_name) - return - } else { - p_data, _ := json.Marshal(ret_proposal) - fmt.Printf("Created Proposal: %s\n", string(p_data)) - } - - ret_proposal, err = ic.GetProposal(proposal_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestProposal: failed to get created proposal") - return - } else { - if( ret_proposal.EncryptionAlgorithm != "aes128" ) { - t.Errorf("Test case TestProposal: failed to create proposal") - return - } - } - - // Update proposal - ret_proposal, err = ic.UpdateProposal(update_proposal) - if (err != nil) { - printError(err) - t.Errorf("Test case TestProposal: failed to update proposal '%s'", proposal_name) - return - } else { - p_data, _ := json.Marshal(ret_proposal) - fmt.Printf("Updated Proposal: %s\n", string(p_data)) - } - - ret_proposal, err = ic.GetProposal(proposal_name) - if (err != nil) { - t.Errorf("Test case TestProposal: failed to get updated proposal") - return - } else { - if( ret_proposal.EncryptionAlgorithm != "aes256" ) { - t.Errorf("Test case TestProposal: failed to update proposal") - return - } - } - - // Delete proposal - err = ic.DeleteProposal(proposal_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestProposal: failed to delete proposal '%s'", proposal_name) - return - } - - ret_proposal, err = ic.GetProposal(proposal_name) - if (err == nil) { - t.Errorf("Test case TestProposal: failed to delete proposal") - return - } -} diff --git a/cnf/test/openwrtclient_test.go b/cnf/test/openwrtclient_test.go deleted file mode 100644 index 17299b4..0000000 --- a/cnf/test/openwrtclient_test.go +++ /dev/null @@ -1,606 +0,0 @@ -package openwrt - -import ( - "openwrt" - "reflect" - "testing" - "flag" - "encoding/json" - "fmt" - "os" -) - -var mwan3 openwrt.Mwan3Client -var service openwrt.ServiceClient -var available_policy string -var available_interface string -var available_interfaceb string - -func TestMain(m *testing.M) { - servIp := flag.String("ip", "10.244.0.18", "SDEWAN CNF Management IP Address") - flag.Parse() - - client := openwrt.NewOpenwrtClient(*servIp, "root", "") - mwan3 = openwrt.Mwan3Client{client} - service = openwrt.ServiceClient{client} - available_policy = "balanced" - available_interface = "wan" - available_interfaceb = "wanb" - - os.Exit(m.Run()) -} - -// Error handler -func handleError(t *testing.T, err error, name string, expectedErr bool, errorCode int) { - if (err != nil) { - if (expectedErr) { - switch err.(type) { - case *openwrt.OpenwrtError: - if(errorCode != err.(*openwrt.OpenwrtError).Code) { - t.Errorf("Test case '%s': expected '%d', but got '%d'", name, errorCode, err.(*openwrt.OpenwrtError).Code) - } else { - fmt.Printf("%s\n", err.(*openwrt.OpenwrtError).Message) - } - default: - t.Errorf("Test case '%s': expected openwrt.OpenwrtError, but got '%s'", name, reflect.TypeOf(err).String()) - } - } else { - t.Errorf("Test case '%s': expected success, but got '%s'", name, reflect.TypeOf(err).String()) - } - } else { - if (expectedErr) { - t.Errorf("Test case '%s': expected error code '%d', but success", name, errorCode) - } - } -} - -func printError(err error) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("%s\n", err.(*openwrt.OpenwrtError).Message) - default: - fmt.Printf("%s\n", reflect.TypeOf(err).String()) - } -} - -// Service API Test -func TestGetServices(t *testing.T) { - res, _ := service.GetAvailableServices() - - if res == nil { - t.Errorf("Test case GetServices: no available services") - return - } - - if !reflect.DeepEqual(res.Services, []string{"mwan3", "firewall", "ipsec"}) { - t.Errorf("Test case GetServices: error available services returned") - } -} - -func TestExecuteService(t *testing.T) { - tcases := []struct { - name string - service string - action string - expectedErr bool - expectedErrCode int - }{ - { - name: "Foo_Service", - service: "foo_service", - action: "restart", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Foo_action", - service: "mwan3", - action: "foo_action", - expectedErr: true, - expectedErrCode: 400, - }, - } - for _, tcase := range tcases { - _, err := service.ExecuteService(tcase.service, tcase.action) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -// MWAN3 Rule API Test -func TestGetInterfaceStatus(t *testing.T) { - res, _ := mwan3.GetInterfaceStatus() - if res == nil { - t.Errorf("Test case GetInterfaceStatus: can not get interfaces status") - } -} - -func TestGetRules(t *testing.T) { - res, _ := mwan3.GetRules() - if res == nil { - t.Errorf("Test case GetRules: can not get mwan3 rules") - return - } - - if len(res.Rules) == 0 { - t.Errorf("Test case GetRules: no rule defined") - return - } - - p_data, _ := json.Marshal(res) - fmt.Printf("%s\n", string(p_data)) -} - -func TestGetRule(t *testing.T) { - tcases := []struct { - name string - rule string - expectedErr bool - expectedErrCode int - }{ - { - name: "GetAvailableRule", - rule: "default_rule", - }, - { - name: "GetFoolRule", - rule: "foo_rule", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := mwan3.GetRule(tcase.rule) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestCreateFoolRule(t *testing.T) { - tcases := []struct { - name string - rule openwrt.SdewanRule - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolPolicy", - rule: openwrt.SdewanRule{Name:" ", Policy: "fool_policy"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Wrong_src_ip", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy, SrcIp: "10.200.200.500"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Wrong_src_port", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy, SrcPort: "-1"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Wrong_dest_ip", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy, DestIp: "10.200"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Wrong_dest_port", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy, DestPort: "0"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Wrong_proto", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy, Proto: "fool_protocol"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Wrong_family", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy, Family: "fool_family"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Wrong_sticky", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy, Sticky: "2"}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Wrong_timeout", - rule: openwrt.SdewanRule{Name:" ", Policy: available_policy, Timeout: "-1"}, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - _, err := mwan3.CreateRule(tcase.rule) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteFoolRule(t *testing.T) { - tcases := []struct { - name string - rule string - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - rule: "", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolName", - rule: "fool_name", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - err := mwan3.DeleteRule(tcase.rule) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestUpdateFoolRule(t *testing.T) { - tcases := []struct { - name string - rule openwrt.SdewanRule - expectedErr bool - expectedErrCode int - }{ - { - name: "FoolName", - rule: openwrt.SdewanRule{Name:"fool_name", Policy: available_policy}, - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := mwan3.UpdateRule(tcase.rule) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestRule(t *testing.T) { - var err error - var ret_rule *openwrt.SdewanRule - - var rule_name = "test_rule" - var rule = openwrt.SdewanRule{Name:rule_name, Policy: available_policy, SrcIp: "10.10.10.10/24", SrcPort: "80"} - var update_rule = openwrt.SdewanRule{Name:rule_name, Policy: available_policy, SrcIp: "100.100.100.100/24", SrcPort: "8000", DestIp: "172.172.172.172/16", DestPort: "8080"} - - _, err = mwan3.GetRule(rule_name) - if (err == nil) { - err = mwan3.DeleteRule(rule_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to delete rule '%s'", rule_name) - return - } - } - - // Create rule - ret_rule, err = mwan3.CreateRule(rule) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to create rule '%s'", rule_name) - return - } else { - p_data, _ := json.Marshal(ret_rule) - fmt.Printf("Created Rule: %s\n", string(p_data)) - } - - ret_rule, err = mwan3.GetRule(rule_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to get created rule") - return - } else { - if( ret_rule.SrcPort != "80" ) { - t.Errorf("Test case TestRule: failed to create rule") - return - } - } - - // Update rule - ret_rule, err = mwan3.UpdateRule(update_rule) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to update rule '%s'", rule_name) - return - } else { - p_data, _ := json.Marshal(ret_rule) - fmt.Printf("Updated Rule: %s\n", string(p_data)) - } - - ret_rule, err = mwan3.GetRule(rule_name) - if (err != nil) { - t.Errorf("Test case TestRule: failed to get updated rule") - return - } else { - if( ret_rule.SrcIp != "100.100.100.100/24" ) { - t.Errorf("Test case TestRule: failed to update rule") - return - } - } - - // Delete rule - err = mwan3.DeleteRule(rule_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestRule: failed to delete rule '%s'", rule_name) - return - } - - ret_rule, err = mwan3.GetRule(rule_name) - if (err == nil) { - t.Errorf("Test case TestRule: failed to delete rule") - return - } -} - -// MWAN3 Policy API Tests -func TestGetPolicies(t *testing.T) { - res, _ := mwan3.GetPolicies() - if res == nil { - t.Errorf("Test case GetPolicies: can not get mwan3 policies") - return - } - - if len(res.Policies) == 0 { - t.Errorf("Test case GetPolicies: no policy defined") - return - } - - p_data, _ := json.Marshal(res) - fmt.Printf("%s\n", string(p_data)) -} - -func TestGetPolicy(t *testing.T) { - tcases := []struct { - name string - policy string - expectedErr bool - expectedErrCode int - }{ - { - name: "GetAvailablePolicy", - policy: available_policy, - }, - { - name: "GetFoolPolicy", - policy: "foo_policy", - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := mwan3.GetPolicy(tcase.policy) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestCreateFoolPolicy(t *testing.T) { - tcases := []struct { - name string - policy openwrt.SdewanPolicy - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - policy: openwrt.SdewanPolicy{Name:" ", Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"1", Weight:"2"}}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "EmptyMember", - policy: openwrt.SdewanPolicy{Name:"policy1", Members:[]openwrt.SdewanMember{}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "Policy-Conflict", - policy: openwrt.SdewanPolicy{Name:"wan_only", Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"1", Weight:"2"}}}, - expectedErr: true, - expectedErrCode: 409, - }, - { - name: "WrongMember-interface", - policy: openwrt.SdewanPolicy{Name:"policy1", Members:[]openwrt.SdewanMember{{Interface:""}}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "WrongMember-interface-name", - policy: openwrt.SdewanPolicy{Name:"policy1", Members:[]openwrt.SdewanMember{{Interface:"fool-name", Metric:"1", Weight:"2"}}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "WrongMember-duplicate-interface", - policy: openwrt.SdewanPolicy{Name:"policy1", Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"1", Weight:"2"}, {Interface:available_interface, Metric:"2", Weight:"3"}}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "WrongMember-Metric", - policy: openwrt.SdewanPolicy{Name:"policy1", Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:""}}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "WrongMember-Weight", - policy: openwrt.SdewanPolicy{Name:"policy1", Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"2"}}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "WrongMember-Metric", - policy: openwrt.SdewanPolicy{Name:"policy1", Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"-1", Weight:"2"}}}, - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "WrongMember-Weight", - policy: openwrt.SdewanPolicy{Name:"policy1", Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"2", Weight:"0"}}}, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - _, err := mwan3.CreatePolicy(tcase.policy) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestDeleteFoolPolicy(t *testing.T) { - tcases := []struct { - name string - policy string - expectedErr bool - expectedErrCode int - }{ - { - name: "EmptyName", - policy: "", - expectedErr: true, - expectedErrCode: 400, - }, - { - name: "FoolName", - policy: "fool_name", - expectedErr: true, - expectedErrCode: 404, - }, - { - name: "Delete-InUsePolicy", - policy: available_policy, - expectedErr: true, - expectedErrCode: 400, - }, - } - - for _, tcase := range tcases { - err := mwan3.DeletePolicy(tcase.policy) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestUpdateFoolPolicy(t *testing.T) { - tcases := []struct { - name string - policy openwrt.SdewanPolicy - expectedErr bool - expectedErrCode int - }{ - { - name: "FoolName", - policy: openwrt.SdewanPolicy{Name:"fool_name", Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"1", Weight:"2"}}}, - expectedErr: true, - expectedErrCode: 404, - }, - } - - for _, tcase := range tcases { - _, err := mwan3.UpdatePolicy(tcase.policy) - handleError(t, err, tcase.name, tcase.expectedErr, tcase.expectedErrCode) - } -} - -func TestPolicy(t *testing.T) { - var err error - var ret_policy *openwrt.SdewanPolicy - - var policy_name = "test_policy" - var policy = openwrt.SdewanPolicy{Name:policy_name, Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"1", Weight:"2"}}} - var update_policy = openwrt.SdewanPolicy{Name:policy_name, Members:[]openwrt.SdewanMember{{Interface:available_interface, Metric:"2", Weight:"3"}, {Interface:available_interfaceb, Metric:"2", Weight:"3"}}} - - _, err = mwan3.GetPolicy(policy_name) - if (err == nil) { - err = mwan3.DeletePolicy(policy_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestPolicy: failed to delete policy '%s'", policy_name) - return - } - } - - // Create policy - ret_policy, err = mwan3.CreatePolicy(policy) - if (err != nil) { - printError(err) - t.Errorf("Test case TestPolicy: failed to create policy '%s'", policy_name) - return - } else { - p_data, _ := json.Marshal(ret_policy) - fmt.Printf("Created Policy: %s\n", string(p_data)) - } - - ret_policy, err = mwan3.GetPolicy(policy_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestPolicy: failed to get created policy") - return - } else { - if( len(ret_policy.Members) != 1 || ret_policy.Members[0].Metric != "1" ) { - t.Errorf("Test case TestPolicy: failed to create policy") - return - } - } - - // Update policy - ret_policy, err = mwan3.UpdatePolicy(update_policy) - if (err != nil) { - printError(err) - t.Errorf("Test case TestPolicy: failed to update policy '%s'", policy_name) - return - } else { - p_data, _ := json.Marshal(ret_policy) - fmt.Printf("Updated Policy: %s\n", string(p_data)) - } - - ret_policy, err = mwan3.GetPolicy(policy_name) - if (err != nil) { - t.Errorf("Test case TestPolicy: failed to get updated policy") - return - } else { - if( len(ret_policy.Members) != 2 || ret_policy.Members[1].Metric != "2" ) { - t.Errorf("Test case TestPolicy: failed to update policy") - return - } - } - - // Delete policy - err = mwan3.DeletePolicy(policy_name) - if (err != nil) { - printError(err) - t.Errorf("Test case TestPolicy: failed to delete policy '%s'", policy_name) - return - } - - ret_policy, err = mwan3.GetPolicy(policy_name) - if (err == nil) { - t.Errorf("Test case TestPolicy: failed to delete policy") - return - } -} diff --git a/cnf/test/test.go b/cnf/test/test.go deleted file mode 100644 index c353c16..0000000 --- a/cnf/test/test.go +++ /dev/null @@ -1,163 +0,0 @@ -package main - -import ( - "openwrt" - "fmt" - "encoding/json" - "strconv" -) - -func testGetServices(serv *openwrt.ServiceClient) { - res, err := serv.GetAvailableServices() - if(err != nil) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("Openwrt Error: %s\n", err.Error()) - fmt.Printf("Openwrt Error: %d\n", err.(*openwrt.OpenwrtError).Code) - default: - fmt.Printf("%s\n", err.Error()) - } - } else { - servs, err := json.Marshal(res) - if(err != nil) { - fmt.Printf("%s\n", err.Error()) - } else { - fmt.Printf("%s\n", string(servs)) - } - } -} - -func testPutService(serv *openwrt.ServiceClient) { - res, err := serv.ExecuteService("mwan3", "start") - if(err != nil) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("Openwrt Error: %s\n", err.Error()) - fmt.Printf("Openwrt Error: %d\n", err.(*openwrt.OpenwrtError).Code) - default: - fmt.Printf("%s\n", err.Error()) - } - } else { - fmt.Printf("Result: %s\n", strconv.FormatBool(res)) - } -} - -func testGetInterfaceStatus(mwan3 *openwrt.Mwan3Client) { - is, err := mwan3.GetInterfaceStatus() - if(err != nil) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("Openwrt Error: %s\n", err.Error()) - fmt.Printf("Openwrt Error: %d\n", err.(*openwrt.OpenwrtError).Code) - default: - fmt.Printf("%s\n", err.Error()) - } - } else { - fmt.Printf("Wan interface status: %s\n", is.Interfaces["wan"].Status) - is_data, err := json.Marshal(is) - if(err != nil) { - fmt.Printf("%s\n", err.Error()) - } else { - fmt.Printf("%s\n", string(is_data)) - } - } - - is = nil -} - -func testGetPolicies(mwan3 *openwrt.Mwan3Client) { - res, err := mwan3.GetPolicies() - if(err != nil) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("Openwrt Error: %s\n", err.Error()) - fmt.Printf("Openwrt Error: %d\n", err.(*openwrt.OpenwrtError).Code) - default: - fmt.Printf("%s\n", err.Error()) - } - } else { - p_data, err := json.Marshal(res) - if(err != nil) { - fmt.Printf("%s\n", err.Error()) - } else { - fmt.Printf("%s\n", string(p_data)) - } - } -} - -func testGetPolicy(mwan3 *openwrt.Mwan3Client, policy string) { - res, err := mwan3.GetPolicy(policy) - if(err != nil) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("Openwrt Error: %s\n", err.Error()) - fmt.Printf("Openwrt Error: %d\n", err.(*openwrt.OpenwrtError).Code) - default: - fmt.Printf("%s\n", err.Error()) - } - } else { - p_data, err := json.Marshal(res) - if(err != nil) { - fmt.Printf("%s\n", err.Error()) - } else { - fmt.Printf("%s\n", string(p_data)) - } - } -} - -func testGetRules(mwan3 *openwrt.Mwan3Client) { - res, err := mwan3.GetRules() - if(err != nil) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("Openwrt Error: %s\n", err.Error()) - fmt.Printf("Openwrt Error: %d\n", err.(*openwrt.OpenwrtError).Code) - default: - fmt.Printf("%s\n", err.Error()) - } - } else { - p_data, err := json.Marshal(res) - if(err != nil) { - fmt.Printf("%s\n", err.Error()) - } else { - fmt.Printf("%s\n", string(p_data)) - } - } -} - -func testGetRule(mwan3 *openwrt.Mwan3Client, rule string) { - res, err := mwan3.GetRule(rule) - if(err != nil) { - switch err.(type) { - case *openwrt.OpenwrtError: - fmt.Printf("Openwrt Error: %s\n", err.Error()) - fmt.Printf("Openwrt Error: %d\n", err.(*openwrt.OpenwrtError).Code) - default: - fmt.Printf("%s\n", err.Error()) - } - } else { - p_data, err := json.Marshal(res) - if(err != nil) { - fmt.Printf("%s\n", err.Error()) - } else { - fmt.Printf("%s\n", string(p_data)) - } - } -} - -func main() { - client := openwrt.NewOpenwrtClient("10.244.0.18", "root", "") - mwan3 := openwrt.Mwan3Client{OpenwrtClient: client} - service := openwrt.ServiceClient{client} - - testGetServices(&service) - - testGetInterfaceStatus(&mwan3) - testGetPolicies(&mwan3) - testGetPolicy(&mwan3, "balanced") - testGetPolicy(&mwan3, "foo_policy") - - testGetRules(&mwan3) - testGetRule(&mwan3, "https") - testGetRule(&mwan3, "foo_rule") -} diff --git a/platform/README.md b/platform/README.md new file mode 100644 index 0000000..7db76d6 --- /dev/null +++ b/platform/README.md @@ -0,0 +1,14 @@ +# Akraino ICN SDEWAN platform + +Akraino ICN SDEWAN platform includes below files/folders: + +* crd-ctrlr +includes source code of sdewan controller, CR definition and sample yaml file to define the CR + +* cnf +includes source code of sdewan cnf + +* test +includes test steps and scripts for an E2E test scenario + +* README.md: this file diff --git a/platform/cnf/README.md b/platform/cnf/README.md new file mode 100644 index 0000000..f312fc4 --- /dev/null +++ b/platform/cnf/README.md @@ -0,0 +1,27 @@ +# cnf + +sdewan cnf docker image for Akraino ICN SDEWAN solution + +# folder structure + +* src: includes all file to generate sdewan docker image +* examples: sample yaml file to create CNF +* doc: documents +* README.md: this file + +# Build + +Requirements: +* docker + +Steps: + +* Set proxy: +If proxy is required in build environment, edit `build/set_proxy` file: +docker_proxy={proxy} + +* Build docker image +cd src +./build_image.sh + +Note: After build, the docker image will be imported as openwrt-1806-mwan3 diff --git a/platform/cnf/doc/README.md b/platform/cnf/doc/README.md new file mode 100644 index 0000000..1a66960 --- /dev/null +++ b/platform/cnf/doc/README.md @@ -0,0 +1 @@ +# SDEWAN CNF documents diff --git a/platform/cnf/examples/README.md b/platform/cnf/examples/README.md new file mode 100644 index 0000000..bd2f498 --- /dev/null +++ b/platform/cnf/examples/README.md @@ -0,0 +1 @@ +# SDEWAN CNF examples diff --git a/cnf/build/Dockerfile_1806_mwan3.tpl b/platform/cnf/src/Dockerfile_1806_mwan3.tpl similarity index 100% rename from cnf/build/Dockerfile_1806_mwan3.tpl rename to platform/cnf/src/Dockerfile_1806_mwan3.tpl diff --git a/cnf/build/Dockerfile_1806_mwan3_noproxy.tpl b/platform/cnf/src/Dockerfile_1806_mwan3_noproxy.tpl similarity index 100% rename from cnf/build/Dockerfile_1806_mwan3_noproxy.tpl rename to platform/cnf/src/Dockerfile_1806_mwan3_noproxy.tpl diff --git a/cnf/build/build_image.sh b/platform/cnf/src/build_image.sh similarity index 100% rename from cnf/build/build_image.sh rename to platform/cnf/src/build_image.sh diff --git a/cnf/build/rest_v1/firewall_rest.lua b/platform/cnf/src/rest_v1/firewall_rest.lua similarity index 100% rename from cnf/build/rest_v1/firewall_rest.lua rename to platform/cnf/src/rest_v1/firewall_rest.lua diff --git a/cnf/build/rest_v1/index.lua b/platform/cnf/src/rest_v1/index.lua similarity index 100% rename from cnf/build/rest_v1/index.lua rename to platform/cnf/src/rest_v1/index.lua diff --git a/cnf/build/rest_v1/ipsec_rest.lua b/platform/cnf/src/rest_v1/ipsec_rest.lua similarity index 100% rename from cnf/build/rest_v1/ipsec_rest.lua rename to platform/cnf/src/rest_v1/ipsec_rest.lua diff --git a/cnf/build/rest_v1/mwan3_rest.lua b/platform/cnf/src/rest_v1/mwan3_rest.lua similarity index 100% rename from cnf/build/rest_v1/mwan3_rest.lua rename to platform/cnf/src/rest_v1/mwan3_rest.lua diff --git a/cnf/build/rest_v1/service.lua b/platform/cnf/src/rest_v1/service.lua similarity index 100% rename from cnf/build/rest_v1/service.lua rename to platform/cnf/src/rest_v1/service.lua diff --git a/cnf/build/rest_v1/utils.lua b/platform/cnf/src/rest_v1/utils.lua similarity index 100% rename from cnf/build/rest_v1/utils.lua rename to platform/cnf/src/rest_v1/utils.lua diff --git a/cnf/build/set_proxy b/platform/cnf/src/set_proxy similarity index 100% rename from cnf/build/set_proxy rename to platform/cnf/src/set_proxy diff --git a/cnf/build/system b/platform/cnf/src/system similarity index 100% rename from cnf/build/system rename to platform/cnf/src/system diff --git a/platform/crd-ctrlr/README.md b/platform/crd-ctrlr/README.md new file mode 100644 index 0000000..47c5d14 --- /dev/null +++ b/platform/crd-ctrlr/README.md @@ -0,0 +1 @@ +# sdewan-controller diff --git a/platform/crd-ctrlr/doc/README.md b/platform/crd-ctrlr/doc/README.md new file mode 100644 index 0000000..3029688 --- /dev/null +++ b/platform/crd-ctrlr/doc/README.md @@ -0,0 +1 @@ +# SDEWAN crd-ctrlr document diff --git a/platform/crd-ctrlr/examples/README.md b/platform/crd-ctrlr/examples/README.md new file mode 100644 index 0000000..02df857 --- /dev/null +++ b/platform/crd-ctrlr/examples/README.md @@ -0,0 +1 @@ +# SDEWAN crd-ctrlr examples diff --git a/Dockerfile b/platform/crd-ctrlr/src/Dockerfile similarity index 100% rename from Dockerfile rename to platform/crd-ctrlr/src/Dockerfile diff --git a/Makefile b/platform/crd-ctrlr/src/Makefile similarity index 100% rename from Makefile rename to platform/crd-ctrlr/src/Makefile diff --git a/PROJECT b/platform/crd-ctrlr/src/PROJECT similarity index 100% rename from PROJECT rename to platform/crd-ctrlr/src/PROJECT diff --git a/readme.md b/platform/crd-ctrlr/src/README.md similarity index 100% rename from readme.md rename to platform/crd-ctrlr/src/README.md diff --git a/api/v1alpha1/groupversion_info.go b/platform/crd-ctrlr/src/api/v1alpha1/groupversion_info.go similarity index 100% rename from api/v1alpha1/groupversion_info.go rename to platform/crd-ctrlr/src/api/v1alpha1/groupversion_info.go diff --git a/api/v1alpha1/mwan3conf_types.go b/platform/crd-ctrlr/src/api/v1alpha1/mwan3conf_types.go similarity index 100% rename from api/v1alpha1/mwan3conf_types.go rename to platform/crd-ctrlr/src/api/v1alpha1/mwan3conf_types.go diff --git a/api/v1alpha1/mwan3conf_webhook.go b/platform/crd-ctrlr/src/api/v1alpha1/mwan3conf_webhook.go similarity index 100% rename from api/v1alpha1/mwan3conf_webhook.go rename to platform/crd-ctrlr/src/api/v1alpha1/mwan3conf_webhook.go diff --git a/api/v1alpha1/sdewan_types.go b/platform/crd-ctrlr/src/api/v1alpha1/sdewan_types.go similarity index 100% rename from api/v1alpha1/sdewan_types.go rename to platform/crd-ctrlr/src/api/v1alpha1/sdewan_types.go diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/platform/crd-ctrlr/src/api/v1alpha1/zz_generated.deepcopy.go similarity index 100% rename from api/v1alpha1/zz_generated.deepcopy.go rename to platform/crd-ctrlr/src/api/v1alpha1/zz_generated.deepcopy.go diff --git a/config/certmanager/certificate.yaml b/platform/crd-ctrlr/src/config/certmanager/certificate.yaml similarity index 100% rename from config/certmanager/certificate.yaml rename to platform/crd-ctrlr/src/config/certmanager/certificate.yaml diff --git a/config/certmanager/kustomization.yaml b/platform/crd-ctrlr/src/config/certmanager/kustomization.yaml similarity index 100% rename from config/certmanager/kustomization.yaml rename to platform/crd-ctrlr/src/config/certmanager/kustomization.yaml diff --git a/config/certmanager/kustomizeconfig.yaml b/platform/crd-ctrlr/src/config/certmanager/kustomizeconfig.yaml similarity index 100% rename from config/certmanager/kustomizeconfig.yaml rename to platform/crd-ctrlr/src/config/certmanager/kustomizeconfig.yaml diff --git a/config/crd/bases/batch.sdewan.akraino.org_mwan3confs.yaml b/platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_mwan3confs.yaml similarity index 100% rename from config/crd/bases/batch.sdewan.akraino.org_mwan3confs.yaml rename to platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_mwan3confs.yaml diff --git a/config/crd/bases/batch.sdewan.akraino.org_sdewans.yaml b/platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_sdewans.yaml similarity index 100% rename from config/crd/bases/batch.sdewan.akraino.org_sdewans.yaml rename to platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_sdewans.yaml diff --git a/config/crd/kustomization.yaml b/platform/crd-ctrlr/src/config/crd/kustomization.yaml similarity index 100% rename from config/crd/kustomization.yaml rename to platform/crd-ctrlr/src/config/crd/kustomization.yaml diff --git a/config/crd/kustomizeconfig.yaml b/platform/crd-ctrlr/src/config/crd/kustomizeconfig.yaml similarity index 100% rename from config/crd/kustomizeconfig.yaml rename to platform/crd-ctrlr/src/config/crd/kustomizeconfig.yaml diff --git a/config/crd/patches/cainjection_in_mwan3confs.yaml b/platform/crd-ctrlr/src/config/crd/patches/cainjection_in_mwan3confs.yaml similarity index 100% rename from config/crd/patches/cainjection_in_mwan3confs.yaml rename to platform/crd-ctrlr/src/config/crd/patches/cainjection_in_mwan3confs.yaml diff --git a/config/crd/patches/cainjection_in_sdewans.yaml b/platform/crd-ctrlr/src/config/crd/patches/cainjection_in_sdewans.yaml similarity index 100% rename from config/crd/patches/cainjection_in_sdewans.yaml rename to platform/crd-ctrlr/src/config/crd/patches/cainjection_in_sdewans.yaml diff --git a/config/crd/patches/webhook_in_mwan3confs.yaml b/platform/crd-ctrlr/src/config/crd/patches/webhook_in_mwan3confs.yaml similarity index 100% rename from config/crd/patches/webhook_in_mwan3confs.yaml rename to platform/crd-ctrlr/src/config/crd/patches/webhook_in_mwan3confs.yaml diff --git a/config/crd/patches/webhook_in_sdewans.yaml b/platform/crd-ctrlr/src/config/crd/patches/webhook_in_sdewans.yaml similarity index 100% rename from config/crd/patches/webhook_in_sdewans.yaml rename to platform/crd-ctrlr/src/config/crd/patches/webhook_in_sdewans.yaml diff --git a/config/default/kustomization.yaml b/platform/crd-ctrlr/src/config/default/kustomization.yaml similarity index 100% rename from config/default/kustomization.yaml rename to platform/crd-ctrlr/src/config/default/kustomization.yaml diff --git a/config/default/manager_auth_proxy_patch.yaml b/platform/crd-ctrlr/src/config/default/manager_auth_proxy_patch.yaml similarity index 100% rename from config/default/manager_auth_proxy_patch.yaml rename to platform/crd-ctrlr/src/config/default/manager_auth_proxy_patch.yaml diff --git a/config/default/manager_image_patch.yaml b/platform/crd-ctrlr/src/config/default/manager_image_patch.yaml similarity index 100% rename from config/default/manager_image_patch.yaml rename to platform/crd-ctrlr/src/config/default/manager_image_patch.yaml diff --git a/config/default/manager_webhook_patch.yaml b/platform/crd-ctrlr/src/config/default/manager_webhook_patch.yaml similarity index 100% rename from config/default/manager_webhook_patch.yaml rename to platform/crd-ctrlr/src/config/default/manager_webhook_patch.yaml diff --git a/config/default/webhookcainjection_patch.yaml b/platform/crd-ctrlr/src/config/default/webhookcainjection_patch.yaml similarity index 100% rename from config/default/webhookcainjection_patch.yaml rename to platform/crd-ctrlr/src/config/default/webhookcainjection_patch.yaml diff --git a/config/manager/kustomization.yaml b/platform/crd-ctrlr/src/config/manager/kustomization.yaml similarity index 100% rename from config/manager/kustomization.yaml rename to platform/crd-ctrlr/src/config/manager/kustomization.yaml diff --git a/config/manager/manager.yaml b/platform/crd-ctrlr/src/config/manager/manager.yaml similarity index 100% rename from config/manager/manager.yaml rename to platform/crd-ctrlr/src/config/manager/manager.yaml diff --git a/config/prometheus/kustomization.yaml b/platform/crd-ctrlr/src/config/prometheus/kustomization.yaml similarity index 100% rename from config/prometheus/kustomization.yaml rename to platform/crd-ctrlr/src/config/prometheus/kustomization.yaml diff --git a/config/prometheus/monitor.yaml b/platform/crd-ctrlr/src/config/prometheus/monitor.yaml similarity index 100% rename from config/prometheus/monitor.yaml rename to platform/crd-ctrlr/src/config/prometheus/monitor.yaml diff --git a/config/rbac/auth_proxy_role.yaml b/platform/crd-ctrlr/src/config/rbac/auth_proxy_role.yaml similarity index 100% rename from config/rbac/auth_proxy_role.yaml rename to platform/crd-ctrlr/src/config/rbac/auth_proxy_role.yaml diff --git a/config/rbac/auth_proxy_role_binding.yaml b/platform/crd-ctrlr/src/config/rbac/auth_proxy_role_binding.yaml similarity index 100% rename from config/rbac/auth_proxy_role_binding.yaml rename to platform/crd-ctrlr/src/config/rbac/auth_proxy_role_binding.yaml diff --git a/config/rbac/auth_proxy_service.yaml b/platform/crd-ctrlr/src/config/rbac/auth_proxy_service.yaml similarity index 100% rename from config/rbac/auth_proxy_service.yaml rename to platform/crd-ctrlr/src/config/rbac/auth_proxy_service.yaml diff --git a/config/rbac/kustomization.yaml b/platform/crd-ctrlr/src/config/rbac/kustomization.yaml similarity index 100% rename from config/rbac/kustomization.yaml rename to platform/crd-ctrlr/src/config/rbac/kustomization.yaml diff --git a/config/rbac/leader_election_role.yaml b/platform/crd-ctrlr/src/config/rbac/leader_election_role.yaml similarity index 100% rename from config/rbac/leader_election_role.yaml rename to platform/crd-ctrlr/src/config/rbac/leader_election_role.yaml diff --git a/config/rbac/leader_election_role_binding.yaml b/platform/crd-ctrlr/src/config/rbac/leader_election_role_binding.yaml similarity index 100% rename from config/rbac/leader_election_role_binding.yaml rename to platform/crd-ctrlr/src/config/rbac/leader_election_role_binding.yaml diff --git a/config/rbac/mwan3conf_editor_role.yaml b/platform/crd-ctrlr/src/config/rbac/mwan3conf_editor_role.yaml similarity index 100% rename from config/rbac/mwan3conf_editor_role.yaml rename to platform/crd-ctrlr/src/config/rbac/mwan3conf_editor_role.yaml diff --git a/config/rbac/mwan3conf_viewer_role.yaml b/platform/crd-ctrlr/src/config/rbac/mwan3conf_viewer_role.yaml similarity index 100% rename from config/rbac/mwan3conf_viewer_role.yaml rename to platform/crd-ctrlr/src/config/rbac/mwan3conf_viewer_role.yaml diff --git a/config/rbac/role.yaml b/platform/crd-ctrlr/src/config/rbac/role.yaml similarity index 100% rename from config/rbac/role.yaml rename to platform/crd-ctrlr/src/config/rbac/role.yaml diff --git a/config/rbac/role_binding.yaml b/platform/crd-ctrlr/src/config/rbac/role_binding.yaml similarity index 100% rename from config/rbac/role_binding.yaml rename to platform/crd-ctrlr/src/config/rbac/role_binding.yaml diff --git a/config/rbac/sdewan_editor_role.yaml b/platform/crd-ctrlr/src/config/rbac/sdewan_editor_role.yaml similarity index 100% rename from config/rbac/sdewan_editor_role.yaml rename to platform/crd-ctrlr/src/config/rbac/sdewan_editor_role.yaml diff --git a/config/rbac/sdewan_viewer_role.yaml b/platform/crd-ctrlr/src/config/rbac/sdewan_viewer_role.yaml similarity index 100% rename from config/rbac/sdewan_viewer_role.yaml rename to platform/crd-ctrlr/src/config/rbac/sdewan_viewer_role.yaml diff --git a/config/samples/batch_v1alpha1_mwan3conf.yaml b/platform/crd-ctrlr/src/config/samples/batch_v1alpha1_mwan3conf.yaml similarity index 100% rename from config/samples/batch_v1alpha1_mwan3conf.yaml rename to platform/crd-ctrlr/src/config/samples/batch_v1alpha1_mwan3conf.yaml diff --git a/config/samples/batch_v1alpha1_sdewan.yaml b/platform/crd-ctrlr/src/config/samples/batch_v1alpha1_sdewan.yaml similarity index 100% rename from config/samples/batch_v1alpha1_sdewan.yaml rename to platform/crd-ctrlr/src/config/samples/batch_v1alpha1_sdewan.yaml diff --git a/config/webhook/kustomization.yaml b/platform/crd-ctrlr/src/config/webhook/kustomization.yaml similarity index 100% rename from config/webhook/kustomization.yaml rename to platform/crd-ctrlr/src/config/webhook/kustomization.yaml diff --git a/config/webhook/kustomizeconfig.yaml b/platform/crd-ctrlr/src/config/webhook/kustomizeconfig.yaml similarity index 100% rename from config/webhook/kustomizeconfig.yaml rename to platform/crd-ctrlr/src/config/webhook/kustomizeconfig.yaml diff --git a/config/webhook/manifests.yaml b/platform/crd-ctrlr/src/config/webhook/manifests.yaml similarity index 100% rename from config/webhook/manifests.yaml rename to platform/crd-ctrlr/src/config/webhook/manifests.yaml diff --git a/config/webhook/service.yaml b/platform/crd-ctrlr/src/config/webhook/service.yaml similarity index 100% rename from config/webhook/service.yaml rename to platform/crd-ctrlr/src/config/webhook/service.yaml diff --git a/controllers/mwan3conf_controller.go b/platform/crd-ctrlr/src/controllers/mwan3conf_controller.go similarity index 100% rename from controllers/mwan3conf_controller.go rename to platform/crd-ctrlr/src/controllers/mwan3conf_controller.go diff --git a/controllers/sdewan_controller.go b/platform/crd-ctrlr/src/controllers/sdewan_controller.go similarity index 100% rename from controllers/sdewan_controller.go rename to platform/crd-ctrlr/src/controllers/sdewan_controller.go diff --git a/controllers/suite_test.go b/platform/crd-ctrlr/src/controllers/suite_test.go similarity index 100% rename from controllers/suite_test.go rename to platform/crd-ctrlr/src/controllers/suite_test.go diff --git a/go.mod b/platform/crd-ctrlr/src/go.mod similarity index 100% rename from go.mod rename to platform/crd-ctrlr/src/go.mod diff --git a/go.sum b/platform/crd-ctrlr/src/go.sum similarity index 100% rename from go.sum rename to platform/crd-ctrlr/src/go.sum diff --git a/hack/boilerplate.go.txt b/platform/crd-ctrlr/src/hack/boilerplate.go.txt similarity index 100% rename from hack/boilerplate.go.txt rename to platform/crd-ctrlr/src/hack/boilerplate.go.txt diff --git a/main.go b/platform/crd-ctrlr/src/main.go similarity index 100% rename from main.go rename to platform/crd-ctrlr/src/main.go diff --git a/openwrt/firewall.go b/platform/crd-ctrlr/src/openwrt/firewall.go similarity index 100% rename from openwrt/firewall.go rename to platform/crd-ctrlr/src/openwrt/firewall.go diff --git a/openwrt/ipsec.go b/platform/crd-ctrlr/src/openwrt/ipsec.go similarity index 100% rename from openwrt/ipsec.go rename to platform/crd-ctrlr/src/openwrt/ipsec.go diff --git a/openwrt/mwan3.go b/platform/crd-ctrlr/src/openwrt/mwan3.go similarity index 100% rename from openwrt/mwan3.go rename to platform/crd-ctrlr/src/openwrt/mwan3.go diff --git a/openwrt/openwrtclient.go b/platform/crd-ctrlr/src/openwrt/openwrtclient.go similarity index 100% rename from openwrt/openwrtclient.go rename to platform/crd-ctrlr/src/openwrt/openwrtclient.go diff --git a/openwrt/service.go b/platform/crd-ctrlr/src/openwrt/service.go similarity index 100% rename from openwrt/service.go rename to platform/crd-ctrlr/src/openwrt/service.go diff --git a/openwrt/utils.go b/platform/crd-ctrlr/src/openwrt/utils.go similarity index 100% rename from openwrt/utils.go rename to platform/crd-ctrlr/src/openwrt/utils.go diff --git a/sdewan-deploy.yaml b/platform/crd-ctrlr/src/sdewan-deploy.yaml similarity index 100% rename from sdewan-deploy.yaml rename to platform/crd-ctrlr/src/sdewan-deploy.yaml diff --git a/wrtprovider/wrtprovider.go b/platform/crd-ctrlr/src/wrtprovider/wrtprovider.go similarity index 100% rename from wrtprovider/wrtprovider.go rename to platform/crd-ctrlr/src/wrtprovider/wrtprovider.go diff --git a/platform/test/README.md b/platform/test/README.md new file mode 100644 index 0000000..fcf876a --- /dev/null +++ b/platform/test/README.md @@ -0,0 +1 @@ +# sdewan solution e2e test diff --git a/traffic-hub/README.md b/traffic-hub/README.md new file mode 100644 index 0000000..4555b06 --- /dev/null +++ b/traffic-hub/README.md @@ -0,0 +1 @@ +# Akraino ICN SDEWAN traffic hub