2016-05-22 13:04:37 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
|
|
|
|
. "github.com/onsi/ginkgo"
|
|
|
|
. "github.com/onsi/gomega"
|
|
|
|
)
|
|
|
|
|
|
|
|
var _ = Describe("Configfile", func() {
|
|
|
|
var config = `---
|
|
|
|
root: /
|
|
|
|
hostname: testing
|
|
|
|
dest: s3+http://my-backup/myhost/
|
|
|
|
aws:
|
|
|
|
access_key_id: AKIAJKCC13246798732A
|
|
|
|
secret_access_key: Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf
|
|
|
|
inclist:
|
|
|
|
- /data
|
|
|
|
encryption:
|
|
|
|
enable: true
|
|
|
|
passphrase: 5pJZqnzrmFSi1wqZtcUh
|
|
|
|
static_options: ["--full-if-older-than", "7D", "--s3-use-new-style"]
|
|
|
|
cleanup:
|
|
|
|
type: remove-all-but-n-full
|
|
|
|
value: 2
|
|
|
|
logdir: /var/log/duplicity/
|
|
|
|
`
|
|
|
|
|
|
|
|
var (
|
|
|
|
commandLine, env, argv []string
|
|
|
|
loadErr, err error
|
|
|
|
t string
|
|
|
|
cf *configFile
|
|
|
|
)
|
|
|
|
|
|
|
|
JustBeforeEach(func() {
|
|
|
|
cfg := bytes.NewBuffer([]byte(config))
|
|
|
|
cf, loadErr = loadConfigFile(cfg)
|
|
|
|
if loadErr != nil {
|
|
|
|
panic(loadErr)
|
|
|
|
}
|
|
|
|
commandLine, env, err = cf.GenerateCommand(argv, t)
|
|
|
|
})
|
|
|
|
|
|
|
|
Context("Backup with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"backup"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style",
|
|
|
|
"--include=/data",
|
|
|
|
"--exclude=**",
|
|
|
|
"/", "s3+http://my-backup/myhost/",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2016-05-23 19:26:20 +00:00
|
|
|
Context("Incremental backup with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"incr"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"incr",
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style",
|
|
|
|
"--include=/data",
|
|
|
|
"--exclude=**",
|
|
|
|
"/", "s3+http://my-backup/myhost/",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
Context("Forced full backup with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"full"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"full",
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style",
|
|
|
|
"--include=/data",
|
|
|
|
"--exclude=**",
|
|
|
|
"/", "s3+http://my-backup/myhost/",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2016-05-22 13:04:37 +00:00
|
|
|
Context("auto-removal with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"__remove_old"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"remove-all-but-n-full", "2",
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style", "--force",
|
|
|
|
"s3+http://my-backup/myhost/",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
Context("verify with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"verify"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"verify",
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style",
|
|
|
|
"--include=/data",
|
|
|
|
"--exclude=**",
|
|
|
|
"s3+http://my-backup/myhost/", "/",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
Context("list-current-files with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"list-current-files"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"list-current-files",
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style",
|
|
|
|
"s3+http://my-backup/myhost/",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
Context("status with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"status"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"collection-status",
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style",
|
|
|
|
"s3+http://my-backup/myhost/",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
Context("restoring a single file with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"restore", "data/myapp/config.yml", "/home/myuser/config.yml"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"restore",
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style",
|
|
|
|
"--file-to-restore", "data/myapp/config.yml",
|
|
|
|
"--include=/data",
|
|
|
|
"--exclude=**",
|
|
|
|
"s3+http://my-backup/myhost/",
|
|
|
|
"/home/myuser/config.yml",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
Context("restoring everything with given config", func() {
|
|
|
|
BeforeEach(func() {
|
|
|
|
argv = []string{"restore", "/home/myuser/mybackup/"}
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should not have errored", func() {
|
|
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have exported secrets in ENV variables", func() {
|
|
|
|
Expect(env).To(Equal([]string{
|
|
|
|
"PASSPHRASE=5pJZqnzrmFSi1wqZtcUh",
|
|
|
|
"AWS_ACCESS_KEY_ID=AKIAJKCC13246798732A",
|
|
|
|
"AWS_SECRET_ACCESS_KEY=Oosdkfjadgiuagbiajbgaliurtbjsbfgaldfbgdf",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
It("should have generated the expected commandLine", func() {
|
|
|
|
Expect(commandLine).To(Equal([]string{
|
|
|
|
"restore",
|
|
|
|
"--full-if-older-than", "7D",
|
|
|
|
"--s3-use-new-style",
|
|
|
|
"--include=/data",
|
|
|
|
"--exclude=**",
|
|
|
|
"s3+http://my-backup/myhost/",
|
|
|
|
"/home/myuser/mybackup/",
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
})
|