Skip to content
This repository was archived by the owner on May 10, 2024. It is now read-only.

Commit d8e23ec

Browse files
committed
tests: Add additional assertion to check contents of restored SQL data
1 parent b094211 commit d8e23ec

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

Diff for: generate/e2e_mysql_test.go

+41-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package generate_test
22

33
import (
4+
"bytes"
45
"context"
56
"fmt"
67
"github.com/pkg/errors"
78
"github.com/riotkit-org/backup-maker/generate"
89
log "github.com/sirupsen/logrus"
910
"github.com/stretchr/testify/assert"
11+
"os"
1012
"os/exec"
1113
"testing"
14+
"time"
1215
)
1316

1417
// TestEndToEnd_MariaDBBackupAndRestore an End-To-End testing procedure for MariaDB/MySQL
@@ -38,7 +41,7 @@ Repository:
3841
3942
`)
4043
generateMySQLSnippet("backup")
41-
subTestMySQLDumpBackup(t)
44+
subTestMySQLDumpBackup(t, dbHostname, dbPort)
4245
_ = c.Terminate(ctx)
4346

4447
// =================================================================================
@@ -63,11 +66,15 @@ Repository:
6366
6467
`)
6568
generateMySQLSnippet("restore")
66-
subTestMySQLRestoreBackup(t)
69+
subTestMySQLRestoreBackup(t, dbHostname, dbPort)
6770
})
6871
}
6972

70-
func subTestMySQLDumpBackup(t *testing.T) {
73+
func subTestMySQLDumpBackup(t *testing.T, mysqlHost string, mysqlPort int) {
74+
// inject example data
75+
time.Sleep(time.Second * 5)
76+
execAndAssert("mysql", "-u", "rojava", "-h", mysqlHost, "-projava", "-P", fmt.Sprintf("%v", mysqlPort), "emma_goldman", "-e", "source ../resources/test/mysql-example-structure.sql")
77+
7178
// run backup.sh
7279
cmd := exec.Command("/bin/bash", "-c", "export PATH=$PATH:./; bash backup.sh 2>&1")
7380
cmd.Dir = "../.build"
@@ -78,7 +85,7 @@ func subTestMySQLDumpBackup(t *testing.T) {
7885
assert.Contains(t, string(out), "Version uploaded")
7986
}
8087

81-
func subTestMySQLRestoreBackup(t *testing.T) {
88+
func subTestMySQLRestoreBackup(t *testing.T, mysqlHost string, mysqlPort int) {
8289
// run restore.sh
8390
cmd := exec.Command("/bin/bash", "-c", "export PATH=$PATH:./; bash restore.sh 2>&1")
8491
cmd.Dir = "../.build"
@@ -87,6 +94,10 @@ func subTestMySQLRestoreBackup(t *testing.T) {
8794

8895
assert.Nil(t, err)
8996
assert.Contains(t, string(out), "Backup restored")
97+
98+
// check that data in database exists - `resources/test/mysql-example-structure.sql` inserts a one record with "Mikhail Bakunin"
99+
sqlCheck := execAndReturn("mysql", "-u", "rojava", "-h", mysqlHost, "-projava", "-P", fmt.Sprintf("%v", mysqlPort), "emma_goldman", "-e", "SELECT * FROM Persons;")
100+
assert.Contains(t, sqlCheck, "Bakunin")
90101
}
91102

92103
func generateMySQLSnippet(operation string) {
@@ -107,3 +118,29 @@ func generateMySQLSnippet(operation string) {
107118
log.Fatal(errors.Wrap(err, "Cannot generate backup snippet"))
108119
}
109120
}
121+
122+
func execAndAssert(command string, args ...string) {
123+
cmd := exec.Command(command, args...)
124+
cmd.Stdout = os.Stdout
125+
cmd.Stderr = os.Stderr
126+
if err := cmd.Start(); err != nil {
127+
log.Fatal(errors.Wrap(err, "Failed to start process"))
128+
}
129+
if err := cmd.Wait(); err != nil {
130+
log.Fatal(errors.Wrap(err, "Process failed"))
131+
}
132+
}
133+
134+
func execAndReturn(command string, args ...string) string {
135+
cmd := exec.Command(command, args...)
136+
var buf bytes.Buffer
137+
cmd.Stdout = &buf
138+
cmd.Stderr = &buf
139+
if err := cmd.Start(); err != nil {
140+
log.Fatal(errors.Wrap(err, "Failed to start process"))
141+
}
142+
if err := cmd.Wait(); err != nil {
143+
log.Fatal(errors.Wrap(err, "Process failed"))
144+
}
145+
return buf.String()
146+
}

Diff for: resources/test/mysql-example-structure.sql

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CREATE TABLE Persons (
2+
PersonID int,
3+
LastName varchar(255),
4+
FirstName varchar(255)
5+
);
6+
7+
INSERT INTO Persons (PersonID, LastName, FirstName) VALUES (1, "Bakunin", "Mikhail");

0 commit comments

Comments
 (0)