From 390f413a92ce2c5aa9adba4e37efc6b2d4443603 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Wed, 6 Aug 2014 18:00:52 -0700 Subject: [PATCH] Make syncpipe transport generic data Signed-off-by: Michael Crosby --- namespaces/init.go | 4 ++-- syncpipe/sync_pipe.go | 19 +++++++++---------- syncpipe/sync_pipe_test.go | 16 +++++++++------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/namespaces/init.go b/namespaces/init.go index f077fd6c8..4c2b3327e 100644 --- a/namespaces/init.go +++ b/namespaces/init.go @@ -48,8 +48,8 @@ func Init(container *libcontainer.Config, uncleanRootfs, consolePath string, syn } // We always read this as it is a way to sync with the parent as well - networkState, err := syncPipe.ReadFromParent() - if err != nil { + var networkState *network.NetworkState + if err := syncPipe.ReadFromParent(&networkState); err != nil { return err } diff --git a/syncpipe/sync_pipe.go b/syncpipe/sync_pipe.go index 10a21a9ef..d2870f526 100644 --- a/syncpipe/sync_pipe.go +++ b/syncpipe/sync_pipe.go @@ -6,8 +6,6 @@ import ( "io/ioutil" "os" "syscall" - - "github.com/docker/libcontainer/network" ) // SyncPipe allows communication to and from the child processes @@ -39,8 +37,8 @@ func (s *SyncPipe) Parent() *os.File { return s.parent } -func (s *SyncPipe) SendToChild(networkState *network.NetworkState) error { - data, err := json.Marshal(networkState) +func (s *SyncPipe) SendToChild(v interface{}) error { + data, err := json.Marshal(v) if err != nil { return err } @@ -63,18 +61,19 @@ func (s *SyncPipe) ReadFromChild() error { return nil } -func (s *SyncPipe) ReadFromParent() (*network.NetworkState, error) { +func (s *SyncPipe) ReadFromParent(v interface{}) error { data, err := ioutil.ReadAll(s.child) if err != nil { - return nil, fmt.Errorf("error reading from sync pipe %s", err) + return fmt.Errorf("error reading from sync pipe %s", err) } - var networkState *network.NetworkState + if len(data) > 0 { - if err := json.Unmarshal(data, &networkState); err != nil { - return nil, err + if err := json.Unmarshal(data, v); err != nil { + return err } } - return networkState, nil + + return nil } func (s *SyncPipe) ReportChildError(err error) { diff --git a/syncpipe/sync_pipe_test.go b/syncpipe/sync_pipe_test.go index 3f99a7d1f..6833277a6 100644 --- a/syncpipe/sync_pipe_test.go +++ b/syncpipe/sync_pipe_test.go @@ -3,10 +3,12 @@ package syncpipe import ( "fmt" "testing" - - "github.com/docker/libcontainer/network" ) +type testStruct struct { + Name string +} + func TestSendErrorFromChild(t *testing.T) { pipe, err := NewSyncPipe() if err != nil { @@ -46,16 +48,16 @@ func TestSendPayloadToChild(t *testing.T) { expected := "libcontainer" - if err := pipe.SendToChild(&network.NetworkState{VethHost: expected}); err != nil { + if err := pipe.SendToChild(testStruct{Name: expected}); err != nil { t.Fatal(err) } - payload, err := pipe.ReadFromParent() - if err != nil { + var s *testStruct + if err := pipe.ReadFromParent(&s); err != nil { t.Fatal(err) } - if payload.VethHost != expected { - t.Fatalf("expected veth host %q but received %q", expected, payload.VethHost) + if s.Name != expected { + t.Fatalf("expected name %q but received %q", expected, s.Name) } }