Merge pull request #27 from Snider/test-sigil-coverage

test(enchantrix): increase test coverage for sigils
This commit is contained in:
Snider 2025-11-02 23:42:48 +00:00 committed by GitHub
commit 06720ce8dc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 138 additions and 94 deletions

View file

@ -1,8 +1,6 @@
package enchantrix_test
import (
"crypto"
"encoding/hex"
"errors"
"testing"
@ -65,95 +63,3 @@ func TestNewSigil_Bad(t *testing.T) {
assert.Nil(t, sigil)
assert.Contains(t, err.Error(), "unknown sigil name")
}
// --- Sigil Tests ---
func TestReverseSigil(t *testing.T) {
s := &enchantrix.ReverseSigil{}
data := []byte("hello")
reversed, err := s.In(data)
assert.NoError(t, err)
assert.Equal(t, "olleh", string(reversed))
original, err := s.Out(reversed)
assert.NoError(t, err)
assert.Equal(t, "hello", string(original))
// Ugly - empty string
empty := []byte("")
reversedEmpty, err := s.In(empty)
assert.NoError(t, err)
assert.Equal(t, "", string(reversedEmpty))
}
func TestHexSigil(t *testing.T) {
s := &enchantrix.HexSigil{}
data := []byte("hello")
encoded, err := s.In(data)
assert.NoError(t, err)
assert.Equal(t, "68656c6c6f", string(encoded))
decoded, err := s.Out(encoded)
assert.NoError(t, err)
assert.Equal(t, "hello", string(decoded))
// Bad - invalid hex string
_, err = s.Out([]byte("not hex"))
assert.Error(t, err)
}
func TestBase64Sigil(t *testing.T) {
s := &enchantrix.Base64Sigil{}
data := []byte("hello")
encoded, err := s.In(data)
assert.NoError(t, err)
assert.Equal(t, "aGVsbG8=", string(encoded))
decoded, err := s.Out(encoded)
assert.NoError(t, err)
assert.Equal(t, "hello", string(decoded))
// Bad - invalid base64 string
_, err = s.Out([]byte("not base64"))
assert.Error(t, err)
}
func TestGzipSigil(t *testing.T) {
s := &enchantrix.GzipSigil{}
data := []byte("hello")
compressed, err := s.In(data)
assert.NoError(t, err)
assert.NotEqual(t, data, compressed)
decompressed, err := s.Out(compressed)
assert.NoError(t, err)
assert.Equal(t, "hello", string(decompressed))
// Bad - invalid gzip data
_, err = s.Out([]byte("not gzip"))
assert.Error(t, err)
}
func TestJSONSigil(t *testing.T) {
s := &enchantrix.JSONSigil{Indent: true}
data := []byte(`{"hello":"world"}`)
indented, err := s.In(data)
assert.NoError(t, err)
assert.Equal(t, "{\n \"hello\": \"world\"\n}", string(indented))
s.Indent = false
compacted, err := s.In(indented)
assert.NoError(t, err)
assert.Equal(t, `{"hello":"world"}`, string(compacted))
// Bad - invalid json
_, err = s.In([]byte("not json"))
assert.Error(t, err)
}
func TestHashSigil(t *testing.T) {
s := enchantrix.NewHashSigil(crypto.SHA256)
data := []byte("hello")
hashed, err := s.In(data)
assert.NoError(t, err)
expectedHash := "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
assert.Equal(t, expectedHash, hex.EncodeToString(hashed))
unhashed, err := s.Out(hashed)
assert.NoError(t, err)
assert.Equal(t, hashed, unhashed) // Out is a no-op
}

View file

@ -0,0 +1,138 @@
package enchantrix
import (
"encoding/hex"
"testing"
"github.com/stretchr/testify/assert"
)
func TestReverseSigil(t *testing.T) {
s := &ReverseSigil{}
data := []byte("hello")
reversed, err := s.In(data)
assert.NoError(t, err)
assert.Equal(t, "olleh", string(reversed))
original, err := s.Out(reversed)
assert.NoError(t, err)
assert.Equal(t, "hello", string(original))
// Ugly - empty string
empty := []byte("")
reversedEmpty, err := s.In(empty)
assert.NoError(t, err)
assert.Equal(t, "", string(reversedEmpty))
}
func TestHexSigil(t *testing.T) {
s := &HexSigil{}
data := []byte("hello")
encoded, err := s.In(data)
assert.NoError(t, err)
assert.Equal(t, "68656c6c6f", string(encoded))
decoded, err := s.Out(encoded)
assert.NoError(t, err)
assert.Equal(t, "hello", string(decoded))
// Bad - invalid hex string
_, err = s.Out([]byte("not hex"))
assert.Error(t, err)
}
func TestBase64Sigil(t *testing.T) {
s := &Base64Sigil{}
data := []byte("hello")
encoded, err := s.In(data)
assert.NoError(t, err)
assert.Equal(t, "aGVsbG8=", string(encoded))
decoded, err := s.Out(encoded)
assert.NoError(t, err)
assert.Equal(t, "hello", string(decoded))
// Bad - invalid base64 string
_, err = s.Out([]byte("not base64"))
assert.Error(t, err)
}
func TestGzipSigil(t *testing.T) {
s := &GzipSigil{}
data := []byte("hello")
compressed, err := s.In(data)
assert.NoError(t, err)
assert.NotEqual(t, data, compressed)
decompressed, err := s.Out(compressed)
assert.NoError(t, err)
assert.Equal(t, "hello", string(decompressed))
// Bad - invalid gzip data
_, err = s.Out([]byte("not gzip"))
assert.Error(t, err)
}
func TestJSONSigil(t *testing.T) {
s := &JSONSigil{Indent: true}
data := []byte(`{"hello":"world"}`)
indented, err := s.In(data)
assert.NoError(t, err)
assert.Equal(t, "{\n \"hello\": \"world\"\n}", string(indented))
s.Indent = false
compacted, err := s.In(indented)
assert.NoError(t, err)
assert.Equal(t, `{"hello":"world"}`, string(compacted))
// Bad - invalid json
_, err = s.In([]byte("not json"))
assert.Error(t, err)
}
func TestHashSigils_Good(t *testing.T) {
// Using the input "hello" for all hash tests
data := []byte("hello")
// A map of hash names to their expected hex-encoded output for the input "hello"
expectedHashes := map[string]string{
"md4": "866437cb7a794bce2b727acc0362ee27",
"md5": "5d41402abc4b2a76b9719d911017c592",
"sha1": "aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d",
"sha224": "ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193",
"sha256": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824",
"sha384": "59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f",
"sha512": "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043",
"ripemd160": "108f07b8382412612c048d07d13f814118445acd",
"sha3-224": "b87f88c72702fff1748e58b87e9141a42c0dbedc29a78cb0d4a5cd81",
"sha3-256": "3338be694f50c5f338814986cdf0686453a888b84f424d792af4b9202398f392",
"sha3-384": "720aea11019ef06440fbf05d87aa24680a2153df3907b23631e7177ce620fa1330ff07c0fddee54699a4c3ee0ee9d887",
"sha3-512": "75d527c368f2efe848ecf6b073a36767800805e9eef2b1857d5f984f036eb6df891d75f72d9b154518c1cd58835286d1da9a38deba3de98b5a53e5ed78a84976",
"sha512-224": "fe8509ed1fb7dcefc27e6ac1a80eddbec4cb3d2c6fe565244374061c",
"sha512-256": "e30d87cfa2a75db545eac4d61baf970366a8357c7f72fa95b52d0accb698f13a",
"blake2s-256": "19213bacc58dee6dbde3ceb9a47cbb330b3d86f8cca8997eb00be456f140ca25",
"blake2b-256": "324dcf027dd4a30a932c441f365a25e86b173defa4b8e58948253471b81b72cf",
"blake2b-384": "85f19170be541e7774da197c12ce959b91a280b2f23e3113d6638a3335507ed72ddc30f81244dbe9fa8d195c23bceb7e",
"blake2b-512": "e4cfa39a3d37be31c59609e807970799caa68a19bfaa15135f165085e01d41a65ba1e1b146aeb6bd0092b49eac214c103ccfa3a365954bbbe52f74a2b3620c94",
}
for name, expectedHex := range expectedHashes {
t.Run(name, func(t *testing.T) {
s, err := NewSigil(name)
assert.NoError(t, err, "Failed to create sigil: %s", name)
hashed, err := s.In(data)
assert.NoError(t, err, "Hashing failed for sigil: %s", name)
assert.Equal(t, expectedHex, hex.EncodeToString(hashed), "Hash mismatch for sigil: %s", name)
// Also test the Out function, which should be a no-op
unhashed, err := s.Out(hashed)
assert.NoError(t, err, "Out failed for sigil: %s", name)
assert.Equal(t, hashed, unhashed, "Out should be a no-op for sigil: %s", name)
})
}
}
func TestHashSigil_Bad(t *testing.T) {
// 99 is not a valid crypto.Hash value
s := NewHashSigil(99)
data := []byte("hello")
_, err := s.In(data)
assert.Error(t, err)
assert.Contains(t, err.Error(), "hash algorithm not available")
}