// Ensure that the decoder returns an error on an invalid URL. func TestConfigDecoder_Decode_ErrInvalidURL(t *testing.T) { var c raft.Config r := strings.NewReader(`{"nodes":[{"id":0,"url":"//my%host"}]}`) if err := raft.NewConfigDecoder(r).Decode(&c); err == nil || err.Error() != "parse //my%host: hexadecimal escape in host" { t.Fatalf("unexpected error: %s", err) } }
// Ensure that the decoder returns an error on duplicate node urls. func TestConfigDecoder_Decode_ErrDuplicateNodeURL(t *testing.T) { var c raft.Config r := strings.NewReader(`{"nodes":[{"id":1,"url":"//localhost:8000"},{"id":2,"url":"//localhost:8000"}]}`) if err := raft.NewConfigDecoder(r).Decode(&c); err != raft.ErrDuplicateNodeURL { t.Fatalf("unexpected error: %s", err) } }
// Ensure that the decoder returns an error on missing node url. func TestConfigDecoder_Decode_ErrNodeURLRequired(t *testing.T) { var c raft.Config r := strings.NewReader(`{"nodes":[{"id":100,"url":""}]}`) if err := raft.NewConfigDecoder(r).Decode(&c); err != raft.ErrNodeURLRequired { t.Fatalf("unexpected error: %s", err) } }
// Ensure that the decoder returns an error on invalid node id. func TestConfigDecoder_Decode_ErrInvalidNodeID(t *testing.T) { var c raft.Config r := strings.NewReader(`{"nodes":[{"id":0,"url":"//localhost:8000"}]}`) if err := raft.NewConfigDecoder(r).Decode(&c); err != raft.ErrInvalidNodeID { t.Fatalf("unexpected error: %s", err) } }
// Ensure that the config decoder can properly decode a config. func TestConfigDecoder_Decode(t *testing.T) { exp := &raft.Config{ ClusterID: 100, Index: 20, MaxNodeID: 3, Nodes: []*raft.ConfigNode{ {ID: 1, URL: &url.URL{Host: "localhost:8000"}}, {ID: 2, URL: &url.URL{Host: "localhost:9000"}}, }, } var c raft.Config r := strings.NewReader(`{"clusterID":100,"index":20,"maxNodeID":3,"nodes":[{"id":1,"url":"//localhost:8000"},{"id":2,"url":"//localhost:9000"}]}`) if err := raft.NewConfigDecoder(r).Decode(&c); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(exp, &c) { t.Fatalf("unexpected config: %#v", &c) } }
// Ensure that the decoder returns an error on invalid JSON. func TestConfigDecoder_Decode_ErrUnexpectedEOF(t *testing.T) { var c raft.Config if err := raft.NewConfigDecoder(strings.NewReader(`{"no`)).Decode(&c); err == nil || err.Error() != "unexpected EOF" { t.Fatalf("unexpected error: %s", err) } }