// ------------------------------------------------------------ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. // ------------------------------------------------------------ package redis import ( "testing" "github.com/stretchr/testify/assert" ) func TestGetKeyVersion(t *testing.T) { store := NewRedisStateStore() t.Run("With all required fields", func(t *testing.T) { key, ver, err := store.getKeyVersion([]interface{}{"data", "TEST_KEY", "version", "TEST_VER"}) assert.Equal(t, nil, err, "failed to read all fields") assert.Equal(t, "TEST_KEY", key, "failed to read key") assert.Equal(t, "TEST_VER", ver, "failed to read version") }) t.Run("With missing data", func(t *testing.T) { _, _, err := store.getKeyVersion([]interface{}{"version", "TEST_VER"}) assert.NotNil(t, err, "failed to respond to missing data field") }) t.Run("With missing version", func(t *testing.T) { _, _, err := store.getKeyVersion([]interface{}{"data", "TEST_KEY"}) assert.NotNil(t, err, "failed to respond to missing version field") }) t.Run("With all required fields - out of order", func(t *testing.T) { key, ver, err := store.getKeyVersion([]interface{}{"version", "TEST_VER", "dragon", "TEST_DRAGON", "data", "TEST_KEY"}) assert.Equal(t, nil, err, "failed to read all fields") assert.Equal(t, "TEST_KEY", key, "failed to read key") assert.Equal(t, "TEST_VER", ver, "failed to read version") }) t.Run("With no fields", func(t *testing.T) { _, _, err := store.getKeyVersion([]interface{}{}) assert.NotNil(t, err, "failed to respond to missing fields") }) t.Run("With wrong fields", func(t *testing.T) { _, _, err := store.getKeyVersion([]interface{}{"dragon", "TEST_DRAGON"}) assert.NotNil(t, err, "failed to respond to missing fields") }) } func TestParseEtag(t *testing.T) { store := NewRedisStateStore() t.Run("Empty ETag", func(t *testing.T) { ver, err := store.parseETag("") assert.Equal(t, nil, err, "failed to parse ETag") assert.Equal(t, 0, ver, "default version should be 0") }) t.Run("Number ETag", func(t *testing.T) { ver, err := store.parseETag("354") assert.Equal(t, nil, err, "failed to parse ETag") assert.Equal(t, 354, ver, "version should be 254") }) t.Run("String ETag", func(t *testing.T) { _, err := store.parseETag("dragon") assert.NotNil(t, err, "shouldn't recognize string ETag") }) } func TestParseConnectedSlavs(t *testing.T) { store := NewRedisStateStore() t.Run("Empty info", func(t *testing.T) { slaves := store.parseConnectedSlaves("") assert.Equal(t, 0, slaves, "connected slaves must be 0") }) t.Run("connectedSlaves property is not included", func(t *testing.T) { slaves := store.parseConnectedSlaves("# Replication\r\nrole:master\r\n") assert.Equal(t, 0, slaves, "connected slaves must be 0") }) t.Run("connectedSlaves is 2", func(t *testing.T) { slaves := store.parseConnectedSlaves("# Replication\r\nrole:master\r\nconnected_slaves:2\r\n") assert.Equal(t, 2, slaves, "connected slaves must be 2") }) t.Run("connectedSlaves is 1", func(t *testing.T) { slaves := store.parseConnectedSlaves("# Replication\r\nrole:master\r\nconnected_slaves:1") assert.Equal(t, 1, slaves, "connected slaves must be 1") }) }