diff options
author | Marc Pervaz Boocha <marcpervaz@qburst.com> | 2025-02-19 18:28:03 +0530 |
---|---|---|
committer | Marc Pervaz Boocha <marcpervaz@qburst.com> | 2025-02-19 18:28:03 +0530 |
commit | 893b439ccb9511ed4a5595bdf8048bb637da1200 (patch) | |
tree | 5885be596e283a719166ba6af9339c3095bc471d /encoding_test.go | |
parent | Bootstraped code for housekeeping operations (diff) | |
download | cache-893b439ccb9511ed4a5595bdf8048bb637da1200.tar cache-893b439ccb9511ed4a5595bdf8048bb637da1200.tar.gz cache-893b439ccb9511ed4a5595bdf8048bb637da1200.tar.bz2 cache-893b439ccb9511ed4a5595bdf8048bb637da1200.tar.lz cache-893b439ccb9511ed4a5595bdf8048bb637da1200.tar.xz cache-893b439ccb9511ed4a5595bdf8048bb637da1200.tar.zst cache-893b439ccb9511ed4a5595bdf8048bb637da1200.zip |
Added Eviction and Options setup
Diffstat (limited to 'encoding_test.go')
-rw-r--r-- | encoding_test.go | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/encoding_test.go b/encoding_test.go new file mode 100644 index 0000000..d48d2fd --- /dev/null +++ b/encoding_test.go @@ -0,0 +1,150 @@ +package cache + +import ( + "bytes" + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func TestEncodeDecodeUint64(t *testing.T) { + tests := []struct { + name string + value uint64 + }{ + {name: "Positive", value: 1234567890}, + {name: "Zero", value: 0}, + {name: "Max", value: ^uint64(0)}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var buf bytes.Buffer + e := newEncoder(&buf) + + err := e.EncodeUint64(tt.value) + assert.NoError(t, err) + err = e.Flush() + assert.NoError(t, err) + + decoder := newDecoder(bytes.NewReader(buf.Bytes())) + + decodedValue, err := decoder.DecodeUint64() + assert.NoError(t, err) + + assert.Equal(t, tt.value, decodedValue) + }) + } +} + +func TestEncodeDecodeTime(t *testing.T) { + tests := []struct { + name string + value time.Time + }{ + {name: "Time Now", value: time.Now()}, + {name: "Time Zero", value: time.Time{}}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var buf bytes.Buffer + e := newEncoder(&buf) + + err := e.EncodeTime(tt.value) + assert.NoError(t, err) + err = e.Flush() + assert.NoError(t, err) + + decoder := newDecoder(bytes.NewReader(buf.Bytes())) + + decodedValue, err := decoder.DecodeTime() + assert.NoError(t, err) + + assert.WithinDuration(t, tt.value, decodedValue, time.Second) + }) + } +} + +func TestEncodeDecodeBytes(t *testing.T) { + tests := []struct { + name string + value []byte + }{ + {name: "Empty", value: []byte{}}, + {name: "Non-Empty", value: []byte("hello world")}, + {name: "Bytes Large", value: []byte("A very long string of characters to test large data")}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var buf bytes.Buffer + e := newEncoder(&buf) + + err := e.EncodeBytes(tt.value) + assert.NoError(t, err) + err = e.Flush() + assert.NoError(t, err) + + decoder := newDecoder(bytes.NewReader(buf.Bytes())) + + decodedValue, err := decoder.DecodeBytes() + assert.NoError(t, err) + + assert.Equal(t, tt.value, decodedValue) + }) + } +} + +func TestEncodeDecodeNode(t *testing.T) { + tests := []struct { + name string + value *node + }{ + {name: "Empty", value: &node{ + Hash: 1234567890, + Expiration: time.Now(), + Access: 987654321, + Key: []byte("testKey"), + Value: []byte("testValue"), + }}, + {name: "Non-Empty", value: &node{ + Hash: 1234567890, + Expiration: time.Now(), + Access: 987654321, + Key: []byte("testKey"), + Value: []byte("testValue"), + }}, + {name: "Bytes Large", value: &node{ + Hash: 1234567890, + Expiration: time.Now(), + Access: 987654321, + Key: []byte("testKey"), + Value: []byte("testValue"), + }}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var buf bytes.Buffer + e := newEncoder(&buf) + + err := e.EncodeNode(tt.value) + assert.NoError(t, err) + err = e.Flush() + assert.NoError(t, err) + + decoder := newDecoder(bytes.NewReader(buf.Bytes())) + + decodedValue, err := decoder.DecodeNodes() + assert.NoError(t, err) + + assert.Equal(t, tt.value.Hash, decodedValue.Hash) + assert.WithinDuration(t, tt.value.Expiration, decodedValue.Expiration, 1*time.Second) + assert.Equal(t, tt.value.Access, decodedValue.Access) + assert.Equal(t, tt.value.Key, decodedValue.Key) + assert.Equal(t, tt.value.Value, decodedValue.Value) + }) + } +} |