You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
3.1 KiB
149 lines
3.1 KiB
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()) |
|
}) |
|
} |
|
}
|
|
|