Example #1
0
// 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)
	}
}
Example #2
0
// 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)
	}
}
Example #3
0
// 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)
	}
}
Example #4
0
// 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)
	}
}
Example #5
0
// 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)
	}
}
Example #6
0
// 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)
	}
}