{-#LANGUAGE TemplateHaskell#-} {-#LANGUAGE QuasiQuotes#-} {-#LANGUAGE OverloadedStrings#-} import Test.Hspec import Test.Hspec.Server import Test.Cabal.Path import System.Process data NameSpace = NameSpace{ nName :: String , nOS :: !(Maybe ServerOS) } deriving (Show,Eq) namespace :: String -> NameSpace namespace name = NameSpace name Nothing instance ServerType NameSpace where stSetup a = do os' <- detectOS a return $ a {nOS = os'} stOS = nOS stName = nName stCmd d c arg i = do readProcessWithExitCode "sudo" ( ["ip", "netns", "exec", nName d, c] ++ arg ) i main :: IO () main = do bin <- getExePath "." "network-builder" hspec $ do describe "Create Network" $ with localhost $ do it "create network" $ do command bin ["create","--conf","sample/sample-gre/network-builder.yml"] [] @>= exit 0 describe "Test Network from server2" $ with (namespace "server2") $ do it "ping" $ do host "127.0.0.1" @>= reachable host "192.168.10.1" @>= reachable host "192.168.10.2" @>= reachable host "192.168.10.3" @>= reachable host "192.168.11.1" @>= reachable host "192.168.11.4" @>= reachable host "192.168.12.1" @== none host "192.168.12.4" @== none describe "Test Network from server3" $ with (namespace "server3") $ do it "ping" $ do host "127.0.0.1" @>= reachable host "192.168.10.1" @>= reachable host "192.168.10.2" @>= reachable host "192.168.10.3" @>= reachable host "192.168.11.1" @>= reachable host "192.168.11.4" @>= reachable host "192.168.12.1" @== none host "192.168.12.4" @== none describe "Create Gre Tunnel" $ with localhost $ do it "create tunnel from server2 to server4" $ do command bin ["create-tunnel","sample/sample-gre/tunnel0.yml"] [] @>= exit 0 it "create tunnel from server4 to server2" $ do command bin ["create-tunnel","sample/sample-gre/tunnel1.yml"] [] @>= exit 0 describe "Test Network from server2" $ with (namespace "server2") $ do it "ping" $ do host "127.0.0.1" @>= reachable host "192.168.10.1" @>= reachable host "192.168.10.2" @>= reachable host "192.168.10.3" @>= reachable host "192.168.11.1" @>= reachable host "192.168.11.4" @>= reachable host "192.168.12.1" @>= reachable host "192.168.12.4" @>= reachable describe "Test Network from server3" $ with (namespace "server3") $ do it "ping" $ do host "127.0.0.1" @>= reachable host "192.168.10.1" @>= reachable host "192.168.10.2" @>= reachable host "192.168.10.3" @>= reachable host "192.168.11.1" @>= reachable host "192.168.11.4" @>= reachable host "192.168.12.1" @== reachable host "192.168.12.4" @== reachable describe "Destroy Network with Gre Tunnel" $ with localhost $ do it "destroy network" $ do command bin ["destroy","--conf","sample/sample-gre/network-builder.yml"] [] @>= exit 0 describe "Create Network with GreTap Tunnel" $ with localhost $ do it "create" $ do command bin ["create","--conf","sample/sample-gretap/network-builder.yml"] [] @>= exit 0 describe "Test Network from server2" $ with (namespace "server2") $ do it "ping" $ do host "127.0.0.1" @>= reachable host "192.168.10.1" @>= reachable host "192.168.10.2" @>= reachable host "192.168.10.3" @>= reachable host "192.168.11.1" @>= reachable host "192.168.11.2" @>= reachable host "192.168.11.3" @== none host "192.168.11.4" @== none describe "Test Network from server3" $ with (namespace "server3") $ do it "ping" $ do host "127.0.0.1" @>= reachable host "192.168.10.1" @>= reachable host "192.168.10.2" @>= reachable host "192.168.10.3" @>= reachable host "192.168.11.1" @>= reachable host "192.168.11.2" @>= reachable host "192.168.11.3" @== none host "192.168.11.4" @== none describe "Create GreTap Tunnel" $ with localhost $ do it "create tunnel from server2 to server4" $ do command bin ["create-tunnel","sample/sample-gretap/tunnel0.yml"] [] @>= exit 0 it "create tunnel from server4 to server2" $ do command bin ["create-tunnel","sample/sample-gretap/tunnel1.yml"] [] @>= exit 0 describe "Test Network from server2" $ with (namespace "server2") $ do it "ping" $ do host "127.0.0.1" @>= reachable host "192.168.10.1" @>= reachable host "192.168.10.2" @>= reachable host "192.168.10.3" @>= reachable host "192.168.11.1" @>= reachable host "192.168.11.2" @>= reachable host "192.168.11.3" @== reachable host "192.168.11.4" @== reachable describe "Test Network from server3" $ with (namespace "server3") $ do it "ping" $ do host "127.0.0.1" @>= reachable host "192.168.10.1" @>= reachable host "192.168.10.2" @>= reachable host "192.168.10.3" @>= reachable host "192.168.11.1" @>= reachable host "192.168.11.2" @>= reachable host "192.168.11.3" @== reachable host "192.168.11.4" @== reachable describe "Destroy Network with GreTap Tunnel" $ with localhost $ do it "destroy" $ do command bin ["destroy","--conf","sample/sample-gretap/network-builder.yml"] [] @>= exit 0