Skip to content

Commit 14f93bf

Browse files
sorkiEricson2314
andcommitted
remote: add Types.TrusteFlag, serializer, use in client, more props for handshake
Co-Authored-By: John Ericson <[email protected]>
1 parent 4adf509 commit 14f93bf

File tree

8 files changed

+61
-2
lines changed

8 files changed

+61
-2
lines changed

hnix-store-remote/hnix-store-remote.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ library
9292
, System.Nix.Store.Remote.Types.StoreRequest
9393
, System.Nix.Store.Remote.Types.StoreText
9494
, System.Nix.Store.Remote.Types.SubstituteMode
95+
, System.Nix.Store.Remote.Types.TrustedFlag
9596
, System.Nix.Store.Remote.Types.Verbosity
9697
, System.Nix.Store.Remote.Types.WorkerMagic
9798
, System.Nix.Store.Remote.Types.WorkerOp

hnix-store-remote/src/System/Nix/Store/Remote/Arbitrary.hs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,19 @@ deriving via GenericArbitrary Logger
6969
deriving via GenericArbitrary Verbosity
7070
instance Arbitrary Verbosity
7171

72+
-- * Handshake
73+
74+
deriving via GenericArbitrary WorkerMagic
75+
instance Arbitrary WorkerMagic
76+
77+
deriving via GenericArbitrary TrustedFlag
78+
instance Arbitrary TrustedFlag
79+
80+
-- * Worker protocol
81+
82+
deriving via GenericArbitrary WorkerOp
83+
instance Arbitrary WorkerOp
84+
7285
instance Arbitrary (Some StoreRequest) where
7386
arbitrary = oneof
7487
[ Some <$> (AddToStore <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary)

hnix-store-remote/src/System/Nix/Store/Remote/Client.hs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import qualified Network.Socket.ByteString
2323
import System.Nix.Store.Remote.Logger (processOutput)
2424
import System.Nix.Store.Remote.MonadStore
2525
import System.Nix.Store.Remote.Socket (sockPutS, sockGetS)
26-
import System.Nix.Store.Remote.Serializer (bool, enum, int, mapErrorS, protoVersion, text, workerMagic)
26+
import System.Nix.Store.Remote.Serializer (bool, enum, int, mapErrorS, protoVersion, text, trustedFlag, workerMagic)
2727
import System.Nix.Store.Remote.Types.Logger (Logger)
2828
import System.Nix.Store.Remote.Types.ProtoVersion (ProtoVersion(..), ourProtoVersion)
2929
import System.Nix.Store.Remote.Types.StoreConfig (PreStoreConfig(..), StoreConfig(..))
@@ -133,6 +133,13 @@ runStoreSocket preStoreConfig code =
133133
text
134134
return ()
135135

136+
_remoteTrustsUs <- if ourProtoVersion >= ProtoVersion 1 35
137+
then do
138+
sockGetS
139+
$ mapErrorS RemoteStoreError_SerializerHandshake trustedFlag
140+
else do
141+
return Nothing
142+
136143
-- TODO do something with it
137144
-- TODO patter match better
138145
_ <- mapStoreConfig

hnix-store-remote/src/System/Nix/Store/Remote/Serializer.hs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ module System.Nix.Store.Remote.Serializer
6666
-- * Handshake
6767
, HandshakeSError(..)
6868
, workerMagic
69+
, trustedFlag
6970
-- * Worker protocol
7071
, storeText
7172
, workerOp
@@ -914,6 +915,7 @@ verbosity = Serializer
914915

915916
data HandshakeSError
916917
= HandshakeSError_InvalidWorkerMagic Word64
918+
| HandshakeSError_InvalidTrustedFlag Word8
917919
deriving (Eq, Ord, Generic, Show)
918920

919921
workerMagic :: NixSerializer r HandshakeSError WorkerMagic
@@ -927,6 +929,21 @@ workerMagic = Serializer
927929
, putS = putS int . workerMagicToWord64
928930
}
929931

932+
trustedFlag :: NixSerializer r HandshakeSError (Maybe TrustedFlag)
933+
trustedFlag = Serializer
934+
{ getS = do
935+
n :: Word8 <- getS int
936+
case n of
937+
0 -> return $ Nothing
938+
1 -> return $ Just TrustedFlag_Trusted
939+
2 -> return $ Just TrustedFlag_NotTrusted
940+
_ -> throwError (HandshakeSError_InvalidTrustedFlag n)
941+
, putS = \n -> putS int $ case n of
942+
Nothing -> 0 :: Word8
943+
Just TrustedFlag_Trusted -> 1
944+
Just TrustedFlag_NotTrusted -> 2
945+
}
946+
930947
-- * Worker protocol
931948

932949
storeText :: NixSerializer r SError StoreText

hnix-store-remote/src/System/Nix/Store/Remote/Types.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module System.Nix.Store.Remote.Types
88
, module System.Nix.Store.Remote.Types.StoreRequest
99
, module System.Nix.Store.Remote.Types.StoreText
1010
, module System.Nix.Store.Remote.Types.SubstituteMode
11+
, module System.Nix.Store.Remote.Types.TrustedFlag
1112
, module System.Nix.Store.Remote.Types.Verbosity
1213
, module System.Nix.Store.Remote.Types.WorkerMagic
1314
, module System.Nix.Store.Remote.Types.WorkerOp
@@ -22,6 +23,7 @@ import System.Nix.Store.Remote.Types.StoreConfig
2223
import System.Nix.Store.Remote.Types.StoreRequest
2324
import System.Nix.Store.Remote.Types.StoreText
2425
import System.Nix.Store.Remote.Types.SubstituteMode
26+
import System.Nix.Store.Remote.Types.TrustedFlag
2527
import System.Nix.Store.Remote.Types.Verbosity
2628
import System.Nix.Store.Remote.Types.WorkerMagic
2729
import System.Nix.Store.Remote.Types.WorkerOp
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module System.Nix.Store.Remote.Types.TrustedFlag
2+
( TrustedFlag(..)
3+
) where
4+
5+
import GHC.Generics (Generic)
6+
7+
-- | Whether remote side trust us
8+
data TrustedFlag
9+
= TrustedFlag_Trusted
10+
| TrustedFlag_NotTrusted
11+
deriving (Bounded, Eq, Generic, Enum, Ord, Show)

hnix-store-remote/src/System/Nix/Store/Remote/Types/WorkerOp.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ module System.Nix.Store.Remote.Types.WorkerOp
22
( WorkerOp(..)
33
) where
44

5+
import GHC.Generics (Generic)
6+
57
-- | Worker opcode
68
--
79
-- This type has gaps filled in so that the GHC builtin
@@ -54,4 +56,4 @@ data WorkerOp
5456
| WorkerOp_AddMultipleToStore -- 44 0x2c
5557
| WorkerOp_AddBuildLog -- 45 0x2d
5658
| WorkerOp_BuildPathsWithResults -- 46 0x2e
57-
deriving (Bounded, Eq, Enum, Ord, Show, Read)
59+
deriving (Bounded, Eq, Enum, Generic, Ord, Show, Read)

hnix-store-remote/tests/NixSerializerSpec.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,13 @@ spec = parallel $ do
132132
it' "IsValidPath" WorkerOp_IsValidPath 1
133133
it' "BuildPathsWithResults" WorkerOp_BuildPathsWithResults 46
134134

135+
136+
describe "Handshake" $ do
137+
prop "WorkerMagic" $ roundtripS workerMagic
138+
prop "TrustedFlag" $ roundtripS trustedFlag
139+
135140
describe "Worker protocol" $ do
141+
prop "WorkerOp" $ roundtripS workerOp
136142
prop "StoreText" $ roundtripS storeText
137143

138144
prop "StoreRequest"

0 commit comments

Comments
 (0)