{-# LANGUAGE ScopedTypeVariables #-}
import ClassyPrelude
import Network.HTTP.Client
import Network.Nakadi
import Network.Nakadi.Config.Test
import Network.Nakadi.Connection.Test
import Network.Nakadi.EventTypes.Test
import Network.Nakadi.Examples.Test
import Network.Nakadi.Internal.Test
import Network.Nakadi.MonadicAPI.Test
import Network.Nakadi.Registry.Test
import Network.Nakadi.Subscriptions.Test
import Network.Nakadi.Tests.Common
import System.Environment
import System.Exit
import System.IO (hFlush)
import Test.Tasty
main :: IO ()
main = do
putStrLn ""
maybeNakadiEndpoint <- lookupEnv "TEST_NAKADI_ENDPOINT"
(label, runTests) <- case maybeNakadiEndpoint of
Nothing -> do
hPut stderr . encodeUtf8 $
"***************************************************************\n\
\** The environment variable TEST_NAKADI_ENDPOINT is not set. **\n\
\** **\n\
\** SKIPPING INTEGRATION TESTS **\n\
\** **\n\
\** If you want to run the integration tests contained in **\n\
\** this test suite, you need to run a Nakadi server which **\n\
\** allows access without authentication. Then, set the **\n\
\** environment variable TEST_NAKADI_ENDPOINT to the base **\n\
\** endpoint of this Nakadi server. **\n\
\** **\n\
\** To run a local Nakadi server clone the repository **\n\
\** **\n\
\** https://github.com/zalando/nakadi **\n\
\** **\n\
\** and follow the contained instructions; the command **\n\
\** **\n\
\** ./gradlew startNakadi **\n\
\** **\n\
\** starts a local Nakadi server at http://localhost:8080. **\n\
\** **\n\
\** Thus, set TEST_NAKADI_ENDPOINT to http://localhost:8080. **\n\
\***************************************************************\n"
return ("nakadi-client Test Suite (w/o integration tests)", unitTests)
Just nakadiEndpoint -> do
let nakadiEndpointT = pack nakadiEndpoint
case parseRequest nakadiEndpoint of
Just request -> do
let conf = newConfig httpBackendIO request
confIO = newConfigIO request
return ("nakadi-client Test Suite",
integrationTests conf confIO ++ unitTests)
Nothing -> do
hPut stderr . encodeUtf8 $
"Failed to parse Nakadi URL in TEST_NAKADI_ENDPOINT (" <> nakadiEndpointT <> ")"
hFlush stderr
exitFailure
defaultMain (testGroup label runTests)
unitTests :: [TestTree]
unitTests =
[ testInternal
, testConfig
, testConnection
]
integrationTests :: Config App -> ConfigIO -> [TestTree]
integrationTests conf confIO =
[ testSubscriptions conf
, testExamples confIO
, testEventTypes conf
, testRegistry conf
, testMonadicAPI conf
]