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:
parent
f327257b53
commit
ef9e7705c8
@ -17,30 +17,26 @@ import Prologue (liftIO)
|
|||||||
import System.Environment (setEnv)
|
import System.Environment (setEnv)
|
||||||
import Test.Hspec hiding (shouldBe, shouldSatisfy)
|
import Test.Hspec hiding (shouldBe, shouldSatisfy)
|
||||||
import Test.Hspec.Expectations.Pretty
|
import Test.Hspec.Expectations.Pretty
|
||||||
|
import Control.Exception
|
||||||
|
|
||||||
spec :: Spec
|
spec :: Spec
|
||||||
spec = parallel $ do
|
spec =
|
||||||
describe "gitmon" $ do
|
describe "gitmon" $ do
|
||||||
let wd = "test/fixtures/git/examples/all-languages.git"
|
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
|
withRepository lgFactory wd $ do
|
||||||
(client, server) <- liftIO $ socketPair AF_UNIX Stream defaultProtocol
|
|
||||||
|
|
||||||
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
|
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
|
||||||
commit <- reportGitmon' client "cat-file" $ lookupCommit object
|
commit <- reportGitmon' client "cat-file" $ lookupCommit object
|
||||||
info <- liftIO $ recv server 1024
|
info <- liftIO $ recv server 1024
|
||||||
|
|
||||||
let [update, schedule, finish] = infoToCommands info
|
let [update, schedule, finish] = infoToCommands info
|
||||||
|
|
||||||
liftIO $ close client
|
|
||||||
liftIO $ close server
|
|
||||||
|
|
||||||
liftIO $ shouldBe (commitOid commit) object
|
liftIO $ shouldBe (commitOid commit) object
|
||||||
liftIO $ shouldBe update (Just "update")
|
liftIO $ shouldBe update (Just "update")
|
||||||
liftIO $ shouldBe schedule (Just "schedule")
|
liftIO $ shouldBe schedule (Just "schedule")
|
||||||
liftIO $ shouldBe finish (Just "finish")
|
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
|
withRepository lgFactory wd $ do
|
||||||
liftIO $ setEnv "GIT_DIR" wd
|
liftIO $ setEnv "GIT_DIR" wd
|
||||||
liftIO $ setEnv "GIT_SOCKSTAT_VAR_real_ip" "127.0.0.1"
|
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_id" "2"
|
||||||
liftIO $ setEnv "GIT_SOCKSTAT_VAR_repo_name" "examples/all-languages"
|
liftIO $ setEnv "GIT_SOCKSTAT_VAR_repo_name" "examples/all-languages"
|
||||||
|
|
||||||
(client, server) <- liftIO $ socketPair AF_UNIX Stream defaultProtocol
|
|
||||||
|
|
||||||
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
|
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
|
||||||
commit <- reportGitmon' client "cat-file" $ lookupCommit object
|
commit <- reportGitmon' client "cat-file" $ lookupCommit object
|
||||||
info <- liftIO $ recv server 1024
|
info <- liftIO $ recv server 1024
|
||||||
|
|
||||||
let [updateData, _, finishData] = infoToData info
|
let [updateData, _, finishData] = infoToData info
|
||||||
|
|
||||||
liftIO $ close client
|
|
||||||
liftIO $ close server
|
|
||||||
|
|
||||||
liftIO $ shouldBe (commitOid commit) object
|
liftIO $ shouldBe (commitOid commit) object
|
||||||
liftIO $ shouldBe (either id gitDir updateData) wd
|
liftIO $ shouldBe (either id gitDir updateData) wd
|
||||||
liftIO $ shouldBe (either id program updateData) "cat-file"
|
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)) diskWriteBytes finishData) (>= 0)
|
||||||
liftIO $ shouldSatisfy (either (const (-1)) resultCode 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
|
withRepository lgFactory wd $ do
|
||||||
(client, server) <- liftIO $ socketPair AF_UNIX Stream defaultProtocol
|
|
||||||
liftIO $ close client
|
liftIO $ close client
|
||||||
|
|
||||||
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
|
object <- parseObjOid (pack "dfac8fd681b0749af137aebf3203e77a06fbafc2")
|
||||||
commit <- reportGitmon' client "cat-file" $ lookupCommit object
|
commit <- reportGitmon' client "cat-file" $ lookupCommit object
|
||||||
info <- liftIO $ recv server 1024
|
info <- liftIO $ recv server 1024
|
||||||
|
|
||||||
liftIO $ close server
|
|
||||||
|
|
||||||
liftIO $ print info
|
|
||||||
|
|
||||||
liftIO $ shouldBe (commitOid commit) object
|
liftIO $ shouldBe (commitOid commit) object
|
||||||
liftIO $ shouldBe "" info
|
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 :: ByteString -> [Maybe Text]
|
||||||
infoToCommands input = command' . toObject <$> Prelude.take 3 (split '\n' input)
|
infoToCommands input = command' . toObject <$> Prelude.take 3 (split '\n' input)
|
||||||
where
|
where
|
||||||
|
Loading…
Reference in New Issue
Block a user