mirror of
https://github.com/TronoSfera/backupy-agent.git
synced 2026-05-18 10:03:30 +03:00
Source ports from the TronoSfera/backupy-cloud monorepo:
- apps/agent/ — Go agent (WSS client, persistent queue, Docker
discovery, 5 DB drivers: PG/MySQL/Mongo/Redis/SQLite,
pre/post hooks, Prometheus metrics)
- apps/backupy-decrypt/ — standalone CLI for client-side decryption
- packages/proto/ — protobuf wire format (generated .pb.go committed
so the repo builds without protoc)
- docs/ — agent spec + wire-protocol contract
Apache-2.0 license. Image published to ghcr.io/tronosfera/backupy-agent
on every v* tag via .github/workflows/release.yml (multi-arch amd64+arm64).
57 lines
1.8 KiB
Go
57 lines
1.8 KiB
Go
package pipeline
|
||
|
||
import (
|
||
"bytes"
|
||
"crypto/rand"
|
||
"io"
|
||
"testing"
|
||
|
||
"github.com/klauspost/compress/zstd"
|
||
"github.com/stretchr/testify/require"
|
||
)
|
||
|
||
func TestCompressZstd_RoundTrip(t *testing.T) {
|
||
plaintext := make([]byte, 1<<20)
|
||
_, err := rand.Read(plaintext)
|
||
require.NoError(t, err)
|
||
|
||
var compressed bytes.Buffer
|
||
orig, ccount, err := CompressZstd(bytes.NewReader(plaintext), &compressed)
|
||
require.NoError(t, err)
|
||
require.Equal(t, int64(len(plaintext)), orig)
|
||
require.Equal(t, int64(compressed.Len()), ccount)
|
||
|
||
dec, err := zstd.NewReader(&compressed)
|
||
require.NoError(t, err)
|
||
defer dec.Close()
|
||
round, err := io.ReadAll(dec)
|
||
require.NoError(t, err)
|
||
require.Equal(t, plaintext, round, "decompressed bytes must match the original")
|
||
}
|
||
|
||
func TestCompressZstd_Empty(t *testing.T) {
|
||
var compressed bytes.Buffer
|
||
orig, ccount, err := CompressZstd(bytes.NewReader(nil), &compressed)
|
||
require.NoError(t, err)
|
||
require.Equal(t, int64(0), orig)
|
||
// klauspost/compress >=1.17 emits zero bytes for an empty input
|
||
// (no frame header is written when nothing was buffered). We just
|
||
// require ccount to match the bytes actually written to `compressed`
|
||
// and the round-trip to decompress cleanly to an empty payload.
|
||
require.Equal(t, int64(compressed.Len()), ccount)
|
||
|
||
dec, err := zstd.NewReader(&compressed)
|
||
require.NoError(t, err)
|
||
defer dec.Close()
|
||
round, err := io.ReadAll(dec)
|
||
require.NoError(t, err)
|
||
require.Empty(t, round, "empty input must round-trip to empty output")
|
||
}
|
||
|
||
func TestCompressZstd_CompressibleInputShrinks(t *testing.T) {
|
||
plaintext := bytes.Repeat([]byte("ABCDEFGH"), 4096) // 32 KiB of repetition
|
||
var compressed bytes.Buffer
|
||
_, _, err := CompressZstd(bytes.NewReader(plaintext), &compressed)
|
||
require.NoError(t, err)
|
||
require.Less(t, compressed.Len(), len(plaintext)/4, "repetitive input must compress >4×")
|
||
}
|