Skip to content

Commit

Permalink
add more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
omegion committed Jun 1, 2021
1 parent 2c800cc commit 7d7850b
Show file tree
Hide file tree
Showing 18 changed files with 361 additions and 88 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ go get github.com/omegion/db-backup
```

```shell
CLI command to create backup for database in local or cloud.
CLI command to create backup for provider in local or cloud.

Usage:
db-backup [command]
Expand Down Expand Up @@ -44,7 +44,7 @@ db-backup dump s3 \
--type=postgres \
--host=example.com \
--port=1234 \
--database=test \
--provider=test \
--username=test \
--password="12345" \
--bucket-name=$BUCKET_NAME \
Expand Down
16 changes: 8 additions & 8 deletions cmd/local/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package local

import (
"fmt"
"github.com/omegion/db-backup/internal"
"log"
"strings"

"github.com/omegion/db-backup/internal/backup"
db "github.com/omegion/db-backup/internal/database"
db "github.com/omegion/db-backup/internal/provider"

"github.com/omegion/go-command"
"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -47,8 +47,8 @@ func SetupExportCommand(cmd *cobra.Command) {
}
}

// GetDatabaseByType gets database by its type.
func GetDatabaseByType(options db.Options) (db.Database, error) {
// GetDatabaseByType gets provider by its type.
func GetDatabaseByType(options internal.Options) (internal.Database, error) {
if options.Type == "postgres" {
return &db.Postgres{
Host: options.Host,
Expand All @@ -63,11 +63,11 @@ func GetDatabaseByType(options db.Options) (db.Database, error) {
return &db.Postgres{}, db.TypeError{Type: options.Type}
}

// Export exports given tables from database.
// Export exports given tables from provider.
func Export() *cobra.Command {
cmd := &cobra.Command{
Use: "export",
Short: "Export database table to local",
Short: "Export provider table to local",
RunE: func(cmd *cobra.Command, args []string) error {
dbType, _ := cmd.Flags().GetString("type")
host, _ := cmd.Flags().GetString("host")
Expand All @@ -76,10 +76,10 @@ func Export() *cobra.Command {
username, _ := cmd.Flags().GetString("username")
password, _ := cmd.Flags().GetString("password")

commander := command.Command{}
commander := internal.NewCommander()

for _, databaseName := range strings.Split(databases, ",") {
options := db.Options{
options := internal.Options{
Type: dbType,
Host: host,
Port: port,
Expand Down
12 changes: 5 additions & 7 deletions cmd/local/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@ package local

import (
"fmt"
"github.com/omegion/db-backup/internal"
"log"
"strings"

"github.com/omegion/db-backup/internal/backup"
db "github.com/omegion/db-backup/internal/database"

"github.com/omegion/go-command"
"github.com/spf13/cobra"
)

Expand All @@ -20,11 +18,11 @@ func setupImportCommand(cmd *cobra.Command) {
}
}

// Import imports given backups to database.
// Import imports given backups to provider.
func Import() *cobra.Command {
cmd := &cobra.Command{
Use: "import",
Short: "Import database backup from local",
Short: "Import provider backup from local",
RunE: func(cmd *cobra.Command, args []string) error {
dbType, _ := cmd.Flags().GetString("type")
file, _ := cmd.Flags().GetString("file")
Expand All @@ -34,10 +32,10 @@ func Import() *cobra.Command {
username, _ := cmd.Flags().GetString("username")
password, _ := cmd.Flags().GetString("password")

commander := command.Command{}
commander := internal.NewCommander()

for _, databaseName := range strings.Split(databases, ",") {
options := db.Options{
options := internal.Options{
Type: dbType,
Host: host,
Port: port,
Expand Down
2 changes: 1 addition & 1 deletion cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func (c *Commander) SetRootCommand() {
c.Root = &cobra.Command{
Use: "db-backup",
Short: "Database Backup Tool",
Long: "CLI command to create backup for database in local or cloud.",
Long: "CLI command to create backup for provider in local or cloud.",
SilenceUsage: true,
}
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func TestCommander_SetRootCommand(t *testing.T) {

assert.Equal(t, "db-backup", commander.Root.Use)
assert.Equal(t, "Database Backup Tool", commander.Root.Short)
assert.Equal(t, "CLI command to create backup for database in local or cloud.", commander.Root.Long)
assert.Equal(t, "CLI command to create backup for provider in local or cloud.", commander.Root.Long)
assert.Equal(t, true, commander.Root.SilenceUsage)
}

Expand Down
11 changes: 5 additions & 6 deletions cmd/s3/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@ package s3

import (
"fmt"
"github.com/omegion/db-backup/internal"
"log"
"strings"

"github.com/omegion/db-backup/cmd/local"
"github.com/omegion/db-backup/internal/backup"
db "github.com/omegion/db-backup/internal/database"
"github.com/omegion/db-backup/internal/storage"

"github.com/omegion/go-command"
"github.com/spf13/cobra"
)

Expand All @@ -24,11 +23,11 @@ func setupExportCommand(cmd *cobra.Command) {
cmd.Flags().String("endpoint", "", "S3 custom endpoint")
}

// Export exports given tables from database.
// Export exports given tables from provider.
func Export() *cobra.Command {
cmd := &cobra.Command{
Use: "export",
Short: "Export database to S3 bucket.",
Short: "Export provider to S3 bucket.",
RunE: func(cmd *cobra.Command, args []string) error {
dbType, _ := cmd.Flags().GetString("type")
host, _ := cmd.Flags().GetString("host")
Expand All @@ -39,10 +38,10 @@ func Export() *cobra.Command {
bucketName, _ := cmd.Flags().GetString("bucket")
endpointURL, _ := cmd.Flags().GetString("endpoint")

commander := command.Command{}
commander := internal.NewCommander()

for _, databaseName := range strings.Split(databases, ",") {
options := db.Options{
options := internal.Options{
Type: dbType,
Host: host,
Port: port,
Expand Down
11 changes: 5 additions & 6 deletions cmd/s3/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@ package s3

import (
"fmt"
"github.com/omegion/db-backup/internal"
"log"
"strings"

"github.com/omegion/db-backup/cmd/local"
"github.com/omegion/db-backup/internal/backup"
db "github.com/omegion/db-backup/internal/database"
"github.com/omegion/db-backup/internal/storage"

"github.com/omegion/go-command"
"github.com/spf13/cobra"
)

Expand All @@ -22,11 +21,11 @@ func setupImportCommand(cmd *cobra.Command) {
}
}

// Import imports given backups to database.
// Import imports given backups to provider.
func Import() *cobra.Command {
cmd := &cobra.Command{
Use: "import",
Short: "Import database backup from S3 bucket.",
Short: "Import provider backup from S3 bucket.",
RunE: func(cmd *cobra.Command, args []string) error {
dbType, _ := cmd.Flags().GetString("type")
path, _ := cmd.Flags().GetString("path")
Expand All @@ -38,10 +37,10 @@ func Import() *cobra.Command {
bucketName, _ := cmd.Flags().GetString("bucket")
endpointURL, _ := cmd.Flags().GetString("endpoint")

commander := command.Command{}
commander := internal.NewCommander()

for _, databaseName := range strings.Split(databases, ",") {
options := db.Options{
options := internal.Options{
Type: dbType,
Host: host,
Port: port,
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ require (
github.com/sirupsen/logrus v1.8.1
github.com/spf13/cobra v1.1.3
github.com/stretchr/testify v1.7.0
k8s.io/utils v0.0.0-20210527160623-6fdb442a123b
)
5 changes: 5 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
Expand Down Expand Up @@ -298,6 +299,7 @@ github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4l
github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M=
github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
Expand Down Expand Up @@ -554,6 +556,9 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.6/go.mod h1:pyyisuGw24ruLjrr1ddx39WE0y9OooInRzEYLhQB2YY=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/utils v0.0.0-20210527160623-6fdb442a123b h1:MSqsVQ3pZvPGTqCjptfimO2WjG7A9un2zcpiHkA6M/s=
k8s.io/utils v0.0.0-20210527160623-6fdb442a123b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
mvdan.cc/gofumpt v0.1.0/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48=
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
Expand Down
2 changes: 1 addition & 1 deletion internal/backup/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type Options struct {
Host string
}

// Backup for database.
// Backup for provider.
type Backup struct {
Name string
Path string
Expand Down
86 changes: 86 additions & 0 deletions internal/backup/backup_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package backup

import (
"errors"
"testing"

"github.com/stretchr/testify/assert"
)

type mockStorage struct{}

func (s *mockStorage) Get(backup Backup) error { return nil }
func (s *mockStorage) Save(backup Backup) error { return nil }
func (s *mockStorage) Delete(backup Backup) error { return nil }
func (s *mockStorage) List(b Backup) ([]Backup, error) { return []Backup{}, nil }

type mockStorageFailure struct{}

func (s *mockStorageFailure) Get(backup Backup) error { return errors.New("custom-error") }
func (s *mockStorageFailure) Save(backup Backup) error { return errors.New("custom-error") }
func (s *mockStorageFailure) Delete(backup Backup) error { return errors.New("custom-error") }
func (s *mockStorageFailure) List(b Backup) ([]Backup, error) {
return []Backup{}, errors.New("custom-error")
}

func TestBackup_Get(t *testing.T) {
storage := mockStorage{}
backup := New(Options{})

err := backup.Get(&storage)

assert.NoError(t, err)
}

func TestBackup_Get_Failure(t *testing.T) {
storage := mockStorageFailure{}
backup := New(Options{})

err := backup.Get(&storage)

assert.EqualError(t, err, "custom-error")
}

func TestBackup_Save(t *testing.T) {
storage := mockStorage{}
backup := New(Options{})

err := backup.Save(&storage)

assert.NoError(t, err)
}

func TestBackup_Save_Failure(t *testing.T) {
storage := mockStorageFailure{}
backup := New(Options{})

err := backup.Save(&storage)

assert.EqualError(t, err, "custom-error")
}

func TestBackup_Delete(t *testing.T) {
storage := mockStorage{}
backup := New(Options{})

err := backup.Delete(&storage)

assert.NoError(t, err)
}

func TestBackup_Delete_Failure(t *testing.T) {
storage := mockStorageFailure{}
backup := New(Options{})

err := backup.Delete(&storage)

assert.EqualError(t, err, "custom-error")
}

func TestBackup_Filename(t *testing.T) {
backup := New(Options{})

fileName := backup.Filename()

assert.Contains(t, fileName, ".sql.tar.gz")
}

0 comments on commit 7d7850b

Please sign in to comment.