1
1
mirror of https://github.com/github/semantic.git synced 2024-11-28 18:23:44 +03:00

Use bracket to always cleanup socket pairs in specs

This commit is contained in:
Timothy Clem 2017-03-02 10:22:18 -08:00
parent f327257b53
commit ef9e7705c8

View File

@ -17,30 +17,26 @@ import Prologue (liftIO)
import System.Environment (setEnv)
import Test.Hspec hiding (shouldBe, shouldSatisfy)
import Test.Hspec.Expectations.Pretty
import Control.Exception
spec :: Spec
spec = parallel $ do
spec =
describe "gitmon" $ do
let wd = "test/fixtures/git/examples/all-languages.git"
it "receives commands in order" $ do
it "receives commands in order" . withSocketPair $ \(client, server) ->
withRepository lgFactory wd $ do
(client, server) <- liftIO $ socketPair AF_UNIX Stream defaultProtocol
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
commit <- reportGitmon' client "cat-file" $ lookupCommit object
info <- liftIO $ recv server 1024
let [update, schedule, finish] = infoToCommands info
liftIO $ close client
liftIO $ close server
liftIO $ shouldBe (commitOid commit) object
liftIO $ shouldBe update (Just "update")
liftIO $ shouldBe schedule (Just "schedule")
liftIO $ shouldBe finish (Just "finish")
it "receives update command with correct data" $
it "receives update command with correct data" . withSocketPair $ \(client, server) ->
withRepository lgFactory wd $ do
liftIO $ setEnv "GIT_DIR" wd
liftIO $ setEnv "GIT_SOCKSTAT_VAR_real_ip" "127.0.0.1"
@ -48,17 +44,12 @@ spec = parallel $ do
liftIO $ setEnv "GIT_SOCKSTAT_VAR_repo_id" "2"
liftIO $ setEnv "GIT_SOCKSTAT_VAR_repo_name" "examples/all-languages"
(client, server) <- liftIO $ socketPair AF_UNIX Stream defaultProtocol
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
commit <- reportGitmon' client "cat-file" $ lookupCommit object
info <- liftIO $ recv server 1024
let [updateData, _, finishData] = infoToData info
liftIO $ close client
liftIO $ close server
liftIO $ shouldBe (commitOid commit) object
liftIO $ shouldBe (either id gitDir updateData) wd
liftIO $ shouldBe (either id program updateData) "cat-file"
@ -73,22 +64,25 @@ spec = parallel $ do
liftIO $ shouldSatisfy (either (const (-1)) diskWriteBytes finishData) (>= 0)
liftIO $ shouldSatisfy (either (const (-1)) resultCode finishData) (>= 0)
it "returns the correct git result if the socket is unavailable" $
it "returns the correct git result if the socket is unavailable" . withSocketPair $ \(client, server) ->
withRepository lgFactory wd $ do
(client, server) <- liftIO $ socketPair AF_UNIX Stream defaultProtocol
liftIO $ close client
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
commit <- reportGitmon' client "cat-file" $ lookupCommit object
info <- liftIO $ recv server 1024
liftIO $ close server
liftIO $ print info
liftIO $ shouldBe (commitOid commit) object
liftIO $ shouldBe "" info
withSocketPair :: ((Socket, Socket) -> IO c) -> IO c
withSocketPair =
bracket
(socketPair AF_UNIX Stream defaultProtocol)
(\(client, server) -> do
close client
close server)
infoToCommands :: ByteString -> [Maybe Text]
infoToCommands input = command' . toObject <$> Prelude.take 3 (split '\n' input)
where