diff --git a/remote-grain.go b/remote-grain.go index 8fde920..533c7eb 100644 --- a/remote-grain.go +++ b/remote-grain.go @@ -18,6 +18,9 @@ type CartIdPayload struct { } func MakeCartInnerFrame(id CartId, payload []byte) []byte { + if payload == nil { + return id[:] + } return append(id[:], payload...) } diff --git a/remote-grain_test.go b/remote-grain_test.go new file mode 100644 index 0000000..7560a79 --- /dev/null +++ b/remote-grain_test.go @@ -0,0 +1,17 @@ +package main + +import "testing" + +func TestCartIdsNullData(t *testing.T) { + data := MakeCartInnerFrame(ToCartId("kalle"), nil) + cart, err := GetCartFrame(data) + if err != nil { + t.Errorf("Error getting cart: %v", err) + } + if cart.Id.String() != "kalle" { + t.Errorf("Expected kalle, got %s", cart.Id) + } + if len(cart.Data) != 0 { + t.Errorf("Expected no data, got %v", cart.Data) + } +} diff --git a/synced-pool.go b/synced-pool.go index 7898c1c..68354c8 100644 --- a/synced-pool.go +++ b/synced-pool.go @@ -366,12 +366,16 @@ func (p *SyncedPool) AddRemote(host string) { if host == "" || hasHost { return } + // if host == "" || hasHost || host == p.Hostname { + // return + // } client := NewConnection(fmt.Sprintf("%s:1338", host)) - _, err := client.Call(Ping, nil) + r, err := client.Call(Ping, nil) if err != nil { log.Printf("Error connecting to remote %s: %s\n", host, err) return } + log.Printf("Connected to remote %s: %v\n", host, r) remote := RemoteHost{ Connection: client, diff --git a/synced-pool_test.go b/synced-pool_test.go index df37e90..b90448e 100644 --- a/synced-pool_test.go +++ b/synced-pool_test.go @@ -13,18 +13,25 @@ func TestConnection(t *testing.T) { Id: id, storageMessages: []Message{}, Items: []*CartItem{}, + Deliveries: make([]CartDelivery, 0), TotalPrice: 0, }, nil }) + hg, err := NewGrainHandler(localPool, ":1337") + + if err != nil { + t.Errorf("Error creating handler: %v\n", err) + } + if hg == nil { + t.Errorf("Expected handler, got nil") + } pool, err := NewSyncedPool(localPool, "127.0.0.1", nil) if err != nil { t.Errorf("Error creating pool: %v", err) } + time.Sleep(400 * time.Millisecond) + pool.AddRemote("127.0.0.1") - err = pool.AddRemote("127.0.0.1") - if err != nil { - t.Errorf("Error adding remote: %v", err) - } go pool.Negotiate() data, err := pool.Get(ToCartId("kalle"))