8 changed files with 424 additions and 51 deletions
@ -0,0 +1,24 @@
|
||||
package main_test |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"testing" |
||||
) |
||||
|
||||
const MinCoverage = 0.5 |
||||
|
||||
func TestMain(m *testing.M) { |
||||
testResult := m.Run() |
||||
|
||||
if testResult == 0 && testing.CoverMode() != "" { |
||||
c := testing.Coverage() |
||||
if c < MinCoverage { |
||||
fmt.Printf("Tests passed but coverage failed at %0.2f and minimum to pass is %0.2f\n", c, MinCoverage) |
||||
|
||||
testResult = -1 |
||||
} |
||||
} |
||||
|
||||
os.Exit(testResult) |
||||
} |
@ -0,0 +1,149 @@
|
||||
package main_test |
||||
|
||||
import ( |
||||
"bytes" |
||||
"log" |
||||
"testing" |
||||
|
||||
main "git.iamthefij.com/iamthefij/restic-scheduler" |
||||
) |
||||
|
||||
/* |
||||
* type TestCase interface { |
||||
* Run(*testing.T) |
||||
* Name() string |
||||
* } |
||||
* |
||||
* type TestCases []TestCase |
||||
* |
||||
* func (c TestCases) Run(t *testing.T) { |
||||
* t.Helper() |
||||
* |
||||
* for _, tc := range c { |
||||
* testCase := tc |
||||
* |
||||
* t.Parallel() |
||||
* |
||||
* t.Run(tc.Name(), tc.Run(t)) |
||||
* } |
||||
* } |
||||
*/ |
||||
|
||||
func TestGetLogger(t *testing.T) { |
||||
t.Parallel() |
||||
|
||||
initialLogger := main.GetLogger("test") |
||||
|
||||
t.Run("initial logger", func(t *testing.T) { |
||||
t.Parallel() |
||||
AssertEqual(t, "incorrect logger prefix", "test:", initialLogger.Prefix()) |
||||
}) |
||||
|
||||
dupeLogger := main.GetLogger("test") |
||||
|
||||
t.Run("dupe logger", func(t *testing.T) { |
||||
t.Parallel() |
||||
AssertEqual(t, "incorrect logger prefix", "test:", dupeLogger.Prefix()) |
||||
|
||||
if initialLogger != dupeLogger { |
||||
t.Error("expected reused instance") |
||||
} |
||||
}) |
||||
|
||||
secondLogger := main.GetLogger("test2") |
||||
|
||||
t.Run("dupe logger", func(t *testing.T) { |
||||
t.Parallel() |
||||
AssertEqual(t, "incorrect logger prefix", "test2:", secondLogger.Prefix()) |
||||
|
||||
if initialLogger == secondLogger { |
||||
t.Error("expected new instance") |
||||
} |
||||
}) |
||||
} |
||||
|
||||
func TestGetChildLogger(t *testing.T) { |
||||
t.Parallel() |
||||
|
||||
parentLogger := main.GetLogger("parent") |
||||
childLogger := main.GetChildLogger(parentLogger, "child") |
||||
|
||||
AssertEqual(t, "unexpected child logger prefix", "parent:child:", childLogger.Prefix()) |
||||
} |
||||
|
||||
func TestCapturedLogWriter(t *testing.T) { |
||||
t.Parallel() |
||||
|
||||
buffer := bytes.Buffer{} |
||||
logger := log.New(&buffer, "test:", log.Lmsgprefix) |
||||
capturedLogWriter := main.NewCapturedLogWriter(logger) |
||||
|
||||
if _, err := capturedLogWriter.Write([]byte("testing")); err != nil { |
||||
t.Fatalf("failed to write to captured log writter: %v", err) |
||||
} |
||||
|
||||
AssertEqual(t, "buffer contains incorrect values", "test: testing\n", buffer.String()) |
||||
AssertEqual(t, "lines contains incorrect values", []string{"testing"}, capturedLogWriter.Lines) |
||||
} |
||||
|
||||
func TestRunShell(t *testing.T) { |
||||
t.Parallel() |
||||
|
||||
cases := []struct { |
||||
name string |
||||
script string |
||||
cwd string |
||||
env map[string]string |
||||
expectedOutput string |
||||
expectedErr bool |
||||
}{ |
||||
{ |
||||
name: "successful script", |
||||
script: "echo $FOO", |
||||
cwd: ".", |
||||
env: map[string]string{ |
||||
"FOO": "bar", |
||||
}, |
||||
expectedOutput: "prefix: bar\nprefix: \n", |
||||
expectedErr: false, |
||||
}, |
||||
{ |
||||
name: "failed script", |
||||
script: "echo $FOO\nexit 1", |
||||
cwd: ".", |
||||
env: map[string]string{ |
||||
"FOO": "bar", |
||||
}, |
||||
expectedOutput: "prefix: bar\nprefix: \n", |
||||
expectedErr: true, |
||||
}, |
||||
} |
||||
|
||||
for _, c := range cases { |
||||
testCase := c |
||||
|
||||
t.Run(testCase.name, func(t *testing.T) { |
||||
t.Parallel() |
||||
|
||||
buffer := bytes.Buffer{} |
||||
logger := log.New(&buffer, "prefix:", log.Lmsgprefix) |
||||
|
||||
err := main.RunShell( |
||||
testCase.script, |
||||
testCase.cwd, |
||||
testCase.env, |
||||
logger, |
||||
) |
||||
|
||||
if testCase.expectedErr && err == nil { |
||||
t.Error("expected an error but didn't get one") |
||||
} |
||||
|
||||
if !testCase.expectedErr && err != nil { |
||||
t.Errorf("unexpected error: %v", err) |
||||
} |
||||
|
||||
AssertEqual(t, "unexpected output", testCase.expectedOutput, buffer.String()) |
||||
}) |
||||
} |
||||
} |
Loading…
Reference in new issue