diff --git a/Makefile b/Makefile index d8d2a69..401ce0c 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,4 @@ all: cabal build filetest: - ./dnp -f tests/ex1.dnp - ./dnp -f tests/ex2.dnp - ./dnp -f tests/ex3.dnp - ./dnp -f tests/ex4.dnp - ./dnp -f tests/ex5.dnp + ./test diff --git a/src/UnitTests.hs b/src/UnitTests.hs deleted file mode 100644 index 0e0097b..0000000 --- a/src/UnitTests.hs +++ /dev/null @@ -1,267 +0,0 @@ -module UnitTests where - -import Test.HUnit -import FlowController -import qualified Set -import FlowControllerLang -import Base -import qualified TokenBucket as TB --- import EmitFML - -instance AssertionPredicable (Maybe a) where - assertionPredicate Nothing = return False - assertionPredicate (Just _) = return True - -unexpectedState (Just _) = Nothing -unexpectedState Nothing = Just emptyState - -foreverReq shareRef flow rd = - Req shareRef flow 0 NoLimit rd True - -test1 = evalDNP $ do - createSpeakerM "arjun" - -test2 = evalDNP $ do - b <- createSpeakerM "root" - return (not b) - -test3 = evalDNP $ do - b1 <- createSpeakerM "arjun" - b2 <- createSpeakerM "adf" - return (b1 && b2) - -test4 = evalDNP $ do - b1 <- createSpeakerM "arjun" - b2 <- createSpeakerM "arjun" - return (b1 && not b2) - -test5 = evalDNP $ do - b1 <- createSpeakerM "arjun" - b2 <- giveReferenceM "root" rootShareRef "arjun" - return (b1 && b2) - -test6 = evalDNP $ do - b1 <- createSpeakerM "arjun" - let s = Share anyFlow (Set.singleton "root") emptyShareReq (DiscreteLimit 100) - False False TB.unlimited - b2 <- newShareM "root" rootShareRef "arjun-share" s - b3 <- giveReferenceM "root" "arjun-share" "arjun" - return (b1 && b2 && b3) - -frag1 limitForAdf = do - b1 <- createSpeakerM "arjun" - b2 <- createSpeakerM "adf" - let s = Share anyFlow (Set.singleton "root") emptyShareReq (DiscreteLimit 100) - False False TB.unlimited - b3 <- newShareM "root" rootShareRef "arjun-share" s - b4 <- giveReferenceM "root" "arjun-share" "arjun" - let s' = Share anyFlow (Set.singleton "arjun") emptyShareReq (DiscreteLimit limitForAdf) - False False TB.unlimited - b5 <- newShareM "arjun" "arjun-share" "adf-share" s' - b6 <- giveReferenceM "arjun" "adf-share" "adf" - return (b1 && b2 && b3 && b4 && b5 && b6) - -test7 = evalDNP $ do - b1 <- frag1 200 - return (not b1) - -test8 = evalDNP $ do frag1 50 - -test9 = evalDNP $ do - b1 <- frag1 50 - b2 <- giveReferenceM "arjun" "adf-share" "non user" - return (b1 && not b2) - - -frag2 = do - let s = Share anyFlow (Set.singleton "root") emptyShareReq (DiscreteLimit 200) - True True TB.unlimited - b1 <- newShareM "root" rootShareRef "net0" s - return b1 - -test10 = evalDNP $ do frag2 - -test11 = evalDNP $ do - b1 <- frag2 - b2 <- requestM "root" (foreverReq "net0" anyFlow (ReqResv 300)) - return (b1 && not b2) - -test12 = evalDNP $ do - b1 <- frag2 - b2 <- requestM "root" (foreverReq rootShareRef anyFlow (ReqResv 300)) - return (b1 && b2) - -test13 = evalDNP $ do - b1 <- frag2 - b2 <- requestM "root" (foreverReq "net0" anyFlow (ReqResv 100)) - b3 <- requestM "root" (foreverReq "net0" anyFlow (ReqResv 100)) - return (b1 && b2 && b3) - -test14 = evalDNP $ do - b1 <- frag2 - b2 <- requestM "root" (foreverReq "net0" anyFlow (ReqResv 100)) - b3 <- requestM "root" (foreverReq "net0" anyFlow (ReqResv 100)) - b4 <- requestM "root" (foreverReq "net0" anyFlow (ReqResv 100)) - return (b1 && b2 && b3 && not b4) - - -frag3 = do - b1 <- frag2 - b2 <- createSpeakerM "adf" - let s = Share anyFlow (Set.singleton "root") emptyShareReq (DiscreteLimit 150) - False False TB.unlimited - b3 <- newShareM "root" "net0" "adfShare" s - b4 <- giveReferenceM "root" "adfShare" "adf" - b5 <- requestM "adf" (foreverReq "adfShare" anyFlow (ReqResv 100)) - return (b1 && b2 && b3 && b4 && b5) - -test15 = evalDNP $ do frag3 - -test16 = evalDNP $ do - b1 <- frag3 - b2 <- requestM "root" (foreverReq "net0" anyFlow (ReqResv 100)) - return (b1 && b2) - -test16a = evalDNP $ do - b1 <- frag3 - b2 <- requestM "root" (foreverReq "adfShare" anyFlow (ReqResv 50)) - return (b1 && b2) - -test16b = evalDNP $ do - b1 <- frag3 - b2 <- requestM "root" (foreverReq "adfShare" anyFlow (ReqResv 51)) - return (b1 && not b2) - -test17 = evalDNP $ do - b1 <- frag3 - b2 <- requestM "root" (foreverReq "net0" anyFlow (ReqResv 101)) - return (b1 && not b2) - -test18 = evalDNP $ do - b1 <- frag3 - b2 <- requestM "adf" (foreverReq "adfShare" anyFlow (ReqResv 51)) - return (b1 && not b2) - -frag4 = do - b1 <- createSpeakerM "arjun" - let s = Share anyFlow (Set.singleton "root") emptyShareReq (DiscreteLimit 100) - False False TB.unlimited - b2 <- newShareM "root" rootShareRef "hadoop-share" s - b3 <- giveDefaultReferenceM "root" "hadoop-share" - b4 <- requestM "arjun" (foreverReq "hadoop-share" anyFlow (ReqResv 25)) - return (b1 && b2 && b3 && b4) - -test19 = evalDNP $ do frag4 - -test20 = evalDNP $ do - b1 <- frag4 - b2 <- createSpeakerM "adf" - b3 <- requestM "adf" (foreverReq "hadoop-share" anyFlow (ReqResv 25)) - return (b1 && b2 && b3) - -arjunFlow = anyFlow { flowSend = Set.singleton "arjun" } - -frag5 = do - b1 <- createSpeakerM "arjun" - let s = Share arjunFlow (Set.singleton "root") emptyShareReq (DiscreteLimit 100) - False False TB.unlimited - b2 <- newShareM "root" rootShareRef "arjun-share" s - b3 <- giveReferenceM "root" "arjun-share" "arjun" - b4 <- requestM "arjun" (foreverReq "arjun-share" arjunFlow (ReqResv 50)) - s <- currentRequestsM - let b5 = Set.fromList s == Set.singleton ( - foreverReq "arjun-share" arjunFlow (ReqResv 50)) - return (b1 && b2 && b3 && b4 && b5) - -test21 = evalDNP $ frag5 - - -frag6 = do - b1 <- frag5 - let arjunWebFlow = (arjunFlow { flowSrcPort = Set.singleton 80}) - b2 <- requestM "arjun" (foreverReq "arjun-share" arjunWebFlow (ReqResv 50)) - s <- currentRequestsM - let b3 = Set.fromList s == Set.fromList [ - (foreverReq "arjun-share" arjunFlow (ReqResv 50)), - (foreverReq "arjun-share" arjunWebFlow (ReqResv 50))] - return (b1 && b2 && b3) - -test22 = evalDNP frag6 - -test23 = evalDNP $ do - b1 <- frag5 - b2 <- requestM "arjun" (foreverReq "arjun-share" anyFlow (ReqResv 50)) - return (b1 && not b2) - -test24 = evalDNP $ do - b1 <- frag2 -- root creates net0 share - let req = Req rootShareRef anyFlow 0 (DiscreteLimit 10) (ReqResv 100) True - b2 <- requestM rootSpeaker req - s <- currentRequestsM - let b3 = s == [req] - tickM 5 - s <- currentRequestsM - let b4 = s == [req] - tickM 2 - s <- currentRequestsM - let b5 = s == [req] - tickM 4 - s <- currentRequestsM - let b6 = s == [] - return (b1 && b2 && b3 && b4 && b5 && b6) - -test25 = evalDNP $ do - b1 <- frag2 - let req = Req rootShareRef anyFlow 5 (DiscreteLimit 10) (ReqResv 100) True - b2 <- requestM rootSpeaker req - s <- currentRequestsM - let b3 = s == [] - tickM 4 - s <- currentRequestsM - let b4 = s == [] - tickM 1 - s <- currentRequestsM - let b5 = s == [req] - tickM 4 - s <- currentRequestsM - let b6 = s == [req] - tickM 1 - s <- currentRequestsM - let b7 = s == [] - return (b1 && b2 && b3 && b4 && b5 && b6 && b7) - - -allTests = TestList - [ test1 ~? "cannot create speaker" - , test2 ~? "duplicate speaker" - , test3 ~? "cannot create two speakers" - , test4 ~? "duplicate speaker arjun" - , test5 ~? "giving root-reference" - , test6 ~? "giving user-restricted reference" - , test7 ~? "cannot increase limit on a reference" - , test8 ~? "can decrease limit on a reference" - , test9 ~? "giving to non-existant user" - , test10 ~? "create physical share" - , test11 ~? "cannot exceed quota" - , test12 ~? "it is silly to reserve from unlimited share" - , test13 ~? "reserve to limit" - , test14 ~? "reserve beyond limit" - , test15 ~? "adf can reserve" - , test16 ~? "reserve to limit in separate shares" - , test16a ~? "root reserve from ADF share" - , test16b ~? "root reserve too much from ADF share" - , test17 ~? "cannot give root what he wants" - , test18 ~? "exceeded limit on subshare" - , test19 ~? "use default reference" - , test20 ~? "use default reference with new user" - , test21 ~? "put flow restrictions on subshare" - , test22 ~? "reserve with more restricted flow than restriction on share" - , test23 ~? "cannot reserve with less restricted flow than restr. on share" - , test24 ~? "reservation should expire" - , test25 ~? "reservation in the future" - ] - -main :: IO () -main = do - runTestTT allTests - return () diff --git a/test b/test new file mode 100755 index 0000000..a0a9479 --- /dev/null +++ b/test @@ -0,0 +1,12 @@ +#!/bin/bash + +for file in tests/*.dnp +do + echo -en "\rTest $file ... " + ./dnp -f $file + tput el1 +done + + + +echo "Testing complete." diff --git a/tests/t1.dnp b/tests/t1.dnp new file mode 100644 index 0000000..9b6c407 --- /dev/null +++ b/tests/t1.dnp @@ -0,0 +1 @@ +True <- root : AddUser arjun. diff --git a/tests/t10.dnp b/tests/t10.dnp new file mode 100644 index 0000000..68a37a2 --- /dev/null +++ b/tests/t10.dnp @@ -0,0 +1 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. diff --git a/tests/t11.dnp b/tests/t11.dnp new file mode 100644 index 0000000..3000c35 --- /dev/null +++ b/tests/t11.dnp @@ -0,0 +1,2 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +False <- root : reserve(*) = 300 on net0. diff --git a/tests/t12.dnp b/tests/t12.dnp new file mode 100644 index 0000000..b084a51 --- /dev/null +++ b/tests/t12.dnp @@ -0,0 +1,2 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : reserve(*) = 300 on rootShare. diff --git a/tests/t13.dnp b/tests/t13.dnp new file mode 100644 index 0000000..fd71db3 --- /dev/null +++ b/tests/t13.dnp @@ -0,0 +1,3 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : reserve(*) = 100 on net0. +True <- root : reserve(*) = 100 on net0. diff --git a/tests/t14.dnp b/tests/t14.dnp new file mode 100644 index 0000000..ef06942 --- /dev/null +++ b/tests/t14.dnp @@ -0,0 +1,4 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : reserve(*) = 100 on net0. +True <- root : reserve(*) = 100 on net0. +False <- root : reserve(*) = 100 on net0. diff --git a/tests/t15.dnp b/tests/t15.dnp new file mode 100644 index 0000000..7d24573 --- /dev/null +++ b/tests/t15.dnp @@ -0,0 +1,5 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : AddUser adf. +True <- root : NewShare adfShare for (*) [reserve <= 150] on net0. +True <- root : Grant adfShare to adf. +True <- adf : reserve(*) = 100 on adfShare. diff --git a/tests/t16.dnp b/tests/t16.dnp new file mode 100644 index 0000000..a75fdef --- /dev/null +++ b/tests/t16.dnp @@ -0,0 +1,6 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : AddUser adf. +True <- root : NewShare adfShare for (*) [reserve <= 150] on net0. +True <- root : Grant adfShare to adf. +True <- adf : reserve(*) = 100 on adfShare. +True <- root : reserve(*) = 100 on net0. diff --git a/tests/t16a.dnp b/tests/t16a.dnp new file mode 100644 index 0000000..58edd65 --- /dev/null +++ b/tests/t16a.dnp @@ -0,0 +1,6 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : AddUser adf. +True <- root : NewShare adfShare for (*) [reserve <= 150] on net0. +True <- root : Grant adfShare to adf. +True <- adf : reserve(*) = 100 on adfShare. +True <- root : reserve(*) = 50 on adfShare. diff --git a/tests/t16b.dnp b/tests/t16b.dnp new file mode 100644 index 0000000..9e3164a --- /dev/null +++ b/tests/t16b.dnp @@ -0,0 +1,6 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : AddUser adf. +True <- root : NewShare adfShare for (*) [reserve <= 150] on net0. +True <- root : Grant adfShare to adf. +True <- adf : reserve(*) = 100 on adfShare. +False <- root : reserve(*) = 51 on adfShare. diff --git a/tests/t17.dnp b/tests/t17.dnp new file mode 100644 index 0000000..38a413c --- /dev/null +++ b/tests/t17.dnp @@ -0,0 +1,6 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : AddUser adf. +True <- root : NewShare adfShare for (*) [reserve <= 150] on net0. +True <- root : Grant adfShare to adf. +True <- adf : reserve(*) = 100 on adfShare. +False <- root : reserve(*) = 101 on net0. diff --git a/tests/t18.dnp b/tests/t18.dnp new file mode 100644 index 0000000..62402ef --- /dev/null +++ b/tests/t18.dnp @@ -0,0 +1,6 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +True <- root : AddUser adf. +True <- root : NewShare adfShare for (*) [reserve <= 150] on net0. +True <- root : Grant adfShare to adf. +True <- adf : reserve(*) = 100 on adfShare. +False <- adf : reserve(*) = 51 on adfShare. diff --git a/tests/t19.dnp b/tests/t19.dnp new file mode 100644 index 0000000..9d81f8b --- /dev/null +++ b/tests/t19.dnp @@ -0,0 +1,4 @@ +True <- root : AddUser arjun. +True <- root : NewShare hadoopShare for (*) [reserve<=100] on rootShare. +True <- root : GrantDefault hadoopShare. +True <- arjun : reserve(*) = 25 on hadoopShare. diff --git a/tests/t2.dnp b/tests/t2.dnp new file mode 100644 index 0000000..b25a3a0 --- /dev/null +++ b/tests/t2.dnp @@ -0,0 +1 @@ +False <- root : AddUser root. diff --git a/tests/t20.dnp b/tests/t20.dnp new file mode 100644 index 0000000..1be97cd --- /dev/null +++ b/tests/t20.dnp @@ -0,0 +1,6 @@ +True <- root : AddUser arjun. +True <- root : NewShare hadoopShare for (*) [reserve<=100] on rootShare. +True <- root : GrantDefault hadoopShare. +True <- arjun : reserve(*) = 25 on hadoopShare. +True <- root : AddUser adf. +True <- adf : reserve(*) = 25 on hadoopShare. diff --git a/tests/t21.dnp b/tests/t21.dnp new file mode 100644 index 0000000..14d1931 --- /dev/null +++ b/tests/t21.dnp @@ -0,0 +1,4 @@ +True <- root : AddUser arjun. +True <- root : NewShare arjunShare for (user=arjun) [reserve <= 100] on rootShare. +True <- root : Grant arjunShare to arjun. +True <- arjun : reserve (user=arjun) = 50 on arjunShare. diff --git a/tests/t22.dnp b/tests/t22.dnp new file mode 100644 index 0000000..f7b7c4b --- /dev/null +++ b/tests/t22.dnp @@ -0,0 +1,13 @@ +True <- root : AddUser arjun. +True <- root : NewShare arjunShare for (user=arjun) [reserve <= 100] on rootShare. +True <- root : Grant arjunShare to arjun. +True <- arjun : reserve (user=arjun) = 50 on arjunShare. +True <- arjun : reserve(user=arjun,app=80) = 50 on arjunShare. +/* TODO: the in-Haskell test checked that + + Set.fromList s == Set.fromList [ + (foreverReq "arjun-share" arjunFlow (ReqResv 50)), + (foreverReq "arjun-share" arjunWebFlow (ReqResv 50))] + + We can do this (or something similar) once we return the free/busy schedule. +*/ diff --git a/tests/t23.dnp b/tests/t23.dnp new file mode 100644 index 0000000..b0da96a --- /dev/null +++ b/tests/t23.dnp @@ -0,0 +1,5 @@ +True <- root : AddUser arjun. +True <- root : NewShare arjunShare for (user=arjun) [reserve <= 100] on rootShare. +True <- root : Grant arjunShare to arjun. +True <- arjun : reserve (user=arjun) = 50 on arjunShare. +False <- arjun : reserve (*) = 50 on arjunShare. diff --git a/tests/t24.dnp b/tests/t24.dnp new file mode 100644 index 0000000..aa4da44 --- /dev/null +++ b/tests/t24.dnp @@ -0,0 +1,12 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +// Original test case inspected the flows in rootshare. We use net0 instead +// and try to exceed the limit on net0. +True <- root : reserve(*) = 10 on net0 from 0 to 10. +False <- root : reserve(*) = 191 on net0. +True <- root : Tick 5. +False <- root : reserve(*) = 191 on net0. +True <- root : Tick 2. +False <- root : reserve(*) = 191 on net0. +True <- root : Tick 4. +True <- root : reserve(*) = 200 on net0. + diff --git a/tests/t25.dnp b/tests/t25.dnp new file mode 100644 index 0000000..5842b8b --- /dev/null +++ b/tests/t25.dnp @@ -0,0 +1,16 @@ +True <- root : NewShare net0 for (*) [reserve <= 200] on rootShare. +// Original test case inspected the flows in rootshare. We use net0 instead +// and try to exceed the limit on net0. +True <- root : reserve(*) = 10 on net0 from 5 to 10. +True <- root : reserve(*) = 200 on net0 from now to +1. +True <- root : Tick 4. +True <- root : reserve(*) = 200 on net0 from now to +1. +True <- root : Tick 1. +False <- root : reserve(*) = 191 on net0 from now to +1. +True <- root : Tick 4. +False <- root : reserve(*) = 191 on net0 from now to +1. +True <- root : Tick 1. +True <- root : reserve(*) = 200 on net0 from now to +1. + + + diff --git a/tests/t3.dnp b/tests/t3.dnp new file mode 100644 index 0000000..6dee327 --- /dev/null +++ b/tests/t3.dnp @@ -0,0 +1,2 @@ +True <- root : AddUser arjun. +True <- root : AddUser adf. diff --git a/tests/t4.dnp b/tests/t4.dnp new file mode 100644 index 0000000..feeb94d --- /dev/null +++ b/tests/t4.dnp @@ -0,0 +1,2 @@ +True <- root : AddUser arjun. +False <- root : AddUser arjun. diff --git a/tests/t5.dnp b/tests/t5.dnp new file mode 100644 index 0000000..a0a4374 --- /dev/null +++ b/tests/t5.dnp @@ -0,0 +1,2 @@ +True <- root : AddUser arjun. +True <- root : Grant rootShare to arjun. diff --git a/tests/t6.dnp b/tests/t6.dnp new file mode 100644 index 0000000..a17e72c --- /dev/null +++ b/tests/t6.dnp @@ -0,0 +1,3 @@ +True <- root : AddUser arjun. +True <- root : NewShare arjunShare for (*) [reserve<=100] on rootShare. +True <- root : Grant arjunShare to arjun. diff --git a/tests/t7.dnp b/tests/t7.dnp new file mode 100644 index 0000000..9a25bb5 --- /dev/null +++ b/tests/t7.dnp @@ -0,0 +1,7 @@ +True <- root : AddUser arjun. +True <- root : AddUser adf. +True <- root : NewShare arjunShare for (*) [reserve<=100] on rootShare. +True <- root : Grant arjunShare to arjun. +False <- arjun : NewShare adfShare for (*) [reserve <= 200] on arjunShare. +False <- arjun : Grant adfShare to adf. + diff --git a/tests/t8.dnp b/tests/t8.dnp new file mode 100644 index 0000000..d7dd947 --- /dev/null +++ b/tests/t8.dnp @@ -0,0 +1,6 @@ +True <- root : AddUser arjun. +True <- root : AddUser adf. +True <- root : NewShare arjunShare for (*) [reserve<=100] on rootShare. +True <- root : Grant arjunShare to arjun. +True <- arjun : NewShare adfShare for (*) [reserve <= 50] on arjunShare. +True <- arjun : Grant adfShare to adf. diff --git a/tests/t9.dnp b/tests/t9.dnp new file mode 100644 index 0000000..742421d --- /dev/null +++ b/tests/t9.dnp @@ -0,0 +1,7 @@ +True <- root : AddUser arjun. +True <- root : AddUser adf. +True <- root : NewShare arjunShare for (*) [reserve<=100] on rootShare. +True <- root : Grant arjunShare to arjun. +True <- arjun : NewShare adfShare for (*) [reserve <= 50] on arjunShare. +True <- arjun : Grant adfShare to adf. +False <- arjun : Grant adfShare to nonUser.