package statesync import ( "testing" "github.com/stretchr/testify/require" ) func TestSnapshotsRequestMessage_ValidateBasic(t *testing.T) { testcases := map[string]struct { msg *snapshotsRequestMessage valid bool }{ "nil": {nil, false}, "valid": {&snapshotsRequestMessage{}, true}, } for name, tc := range testcases { tc := tc t.Run(name, func(t *testing.T) { err := tc.msg.ValidateBasic() if tc.valid { require.NoError(t, err) } else { require.Error(t, err) } }) } } func TestSnapshotsResponseMessage_ValidateBasic(t *testing.T) { testcases := map[string]struct { msg *snapshotsResponseMessage valid bool }{ "nil": {nil, false}, "valid": {&snapshotsResponseMessage{Height: 1, Format: 1, Chunks: 2, Hash: []byte{1}}, true}, "0 height": {&snapshotsResponseMessage{Height: 0, Format: 1, Chunks: 2, Hash: []byte{1}}, false}, "0 format": {&snapshotsResponseMessage{Height: 1, Format: 0, Chunks: 2, Hash: []byte{1}}, true}, "0 chunks": {&snapshotsResponseMessage{Height: 1, Format: 1, Hash: []byte{1}}, false}, "no hash": {&snapshotsResponseMessage{Height: 1, Format: 1, Chunks: 2, Hash: []byte{}}, false}, } for name, tc := range testcases { tc := tc t.Run(name, func(t *testing.T) { err := tc.msg.ValidateBasic() if tc.valid { require.NoError(t, err) } else { require.Error(t, err) } }) } } func TestChunkRequestMessage_ValidateBasic(t *testing.T) { testcases := map[string]struct { msg *chunkRequestMessage valid bool }{ "nil": {nil, false}, "valid": {&chunkRequestMessage{Height: 1, Format: 1, Index: 1}, true}, "0 height": {&chunkRequestMessage{Height: 0, Format: 1, Index: 1}, false}, "0 format": {&chunkRequestMessage{Height: 1, Format: 0, Index: 1}, true}, "0 chunk": {&chunkRequestMessage{Height: 1, Format: 1, Index: 0}, true}, } for name, tc := range testcases { tc := tc t.Run(name, func(t *testing.T) { err := tc.msg.ValidateBasic() if tc.valid { require.NoError(t, err) } else { require.Error(t, err) } }) } } func TestChunkResponseMessage_ValidateBasic(t *testing.T) { testcases := map[string]struct { msg *chunkResponseMessage valid bool }{ "nil message": {nil, false}, "valid": {&chunkResponseMessage{Height: 1, Format: 1, Index: 1, Chunk: []byte{1}}, true}, "0 height": {&chunkResponseMessage{Height: 0, Format: 1, Index: 1, Chunk: []byte{1}}, false}, "0 format": {&chunkResponseMessage{Height: 1, Format: 0, Index: 1, Chunk: []byte{1}}, true}, "0 chunk": {&chunkResponseMessage{Height: 1, Format: 1, Index: 0, Chunk: []byte{1}}, true}, "empty body": {&chunkResponseMessage{Height: 1, Format: 1, Index: 1, Chunk: []byte{}}, true}, "nil body": {&chunkResponseMessage{Height: 1, Format: 1, Index: 1, Chunk: nil}, false}, "missing": {&chunkResponseMessage{Height: 1, Format: 1, Index: 1, Missing: true}, true}, "missing with empty": {&chunkResponseMessage{Height: 1, Format: 1, Index: 1, Missing: true, Chunk: []byte{}}, true}, "missing with body": {&chunkResponseMessage{Height: 1, Format: 1, Index: 1, Missing: true, Chunk: []byte{1}}, false}, } for name, tc := range testcases { tc := tc t.Run(name, func(t *testing.T) { err := tc.msg.ValidateBasic() if tc.valid { require.NoError(t, err) } else { require.Error(t, err) } }) } }