mirror of
https://github.com/zrepl/zrepl.git
synced 2024-12-23 15:38:49 +01:00
4e16952ad9
1. Change config format to support multiple types of snapshotting modes. 2. Implement a hacky way to support periodic or completely manual snaphots. In manual mode, the user has to trigger replication using the wakeup mechanism after they took snapshots using their own tooling. As indicated by the comment, a more general solution would be desirable, but we want to get the release out and 'manual' mode is a feature that some people requested...
58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestSnapshotting(t *testing.T) {
|
|
tmpl := `
|
|
jobs:
|
|
- name: foo
|
|
type: push
|
|
connect:
|
|
type: local
|
|
listener_name: foo
|
|
client_identity: bar
|
|
filesystems: {"<": true}
|
|
%s
|
|
pruning:
|
|
keep_sender:
|
|
- type: last_n
|
|
count: 10
|
|
keep_receiver:
|
|
- type: last_n
|
|
count: 10
|
|
`
|
|
manual := `
|
|
snapshotting:
|
|
type: manual
|
|
`
|
|
periodic := `
|
|
snapshotting:
|
|
type: periodic
|
|
prefix: zrepl_
|
|
interval: 10m
|
|
`
|
|
|
|
fillSnapshotting := func(s string) string {return fmt.Sprintf(tmpl, s)}
|
|
var c *Config
|
|
|
|
t.Run("manual", func(t *testing.T) {
|
|
c = testValidConfig(t, fillSnapshotting(manual))
|
|
snm := c.Jobs[0].Ret.(*PushJob).Snapshotting.Ret.(*SnapshottingManual)
|
|
assert.Equal(t, "manual", snm.Type)
|
|
})
|
|
|
|
t.Run("periodic", func(t *testing.T) {
|
|
c = testValidConfig(t, fillSnapshotting(periodic))
|
|
snp := c.Jobs[0].Ret.(*PushJob).Snapshotting.Ret.(*SnapshottingPeriodic)
|
|
assert.Equal(t, "periodic", snp.Type)
|
|
assert.Equal(t, 10*time.Minute, snp.Interval)
|
|
assert.Equal(t, "zrepl_" , snp.Prefix)
|
|
})
|
|
|
|
}
|