163 lines
3.8 KiB
Go
163 lines
3.8 KiB
Go
package engine
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"sort"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestGenerateID(t *testing.T) {
|
|
t.Run("with version", func(t *testing.T) {
|
|
req := Request{
|
|
Sandbox: "python",
|
|
Version: "dev",
|
|
Command: "run",
|
|
}
|
|
req.GenerateID()
|
|
if !strings.HasPrefix(req.ID, "python.dev_run_") {
|
|
t.Errorf("ID: unexpected prefix %s", req.ID)
|
|
}
|
|
})
|
|
t.Run("without version", func(t *testing.T) {
|
|
req := Request{
|
|
Sandbox: "python",
|
|
Command: "run",
|
|
}
|
|
req.GenerateID()
|
|
if !strings.HasPrefix(req.ID, "python_run_") {
|
|
t.Errorf("ID: unexpected prefix %s", req.ID)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestExecutionError(t *testing.T) {
|
|
inner := errors.New("inner error")
|
|
err := NewExecutionError("failed", inner)
|
|
if err.Error() != "failed: inner error" {
|
|
t.Errorf("Error: expected %q, got %q", "failed: inner error", err.Error())
|
|
}
|
|
unwrapped := err.Unwrap()
|
|
if unwrapped != inner {
|
|
t.Errorf("Unwrap: expected %#v, got %#v", inner, unwrapped)
|
|
}
|
|
}
|
|
|
|
func TestFiles_Count(t *testing.T) {
|
|
var files Files = map[string]string{
|
|
"first": "alice",
|
|
"second": "bob",
|
|
"third": "cindy",
|
|
}
|
|
if files.Count() != 3 {
|
|
t.Errorf("Count: expected 3, got %d", files.Count())
|
|
}
|
|
}
|
|
|
|
func TestFiles_Range(t *testing.T) {
|
|
var files Files = map[string]string{
|
|
"first": "alice",
|
|
"second": "bob",
|
|
"third": "cindy",
|
|
}
|
|
|
|
t.Run("range", func(t *testing.T) {
|
|
names := []string{}
|
|
contents := []string{}
|
|
files.Range(func(name, content string) bool {
|
|
names = append(names, name)
|
|
contents = append(contents, content)
|
|
return true
|
|
})
|
|
sort.Strings(names)
|
|
if !reflect.DeepEqual(names, []string{"first", "second", "third"}) {
|
|
t.Errorf("unexpected names: %v", names)
|
|
}
|
|
sort.Strings(contents)
|
|
if !reflect.DeepEqual(contents, []string{"alice", "bob", "cindy"}) {
|
|
t.Errorf("unexpected contents: %v", contents)
|
|
}
|
|
})
|
|
|
|
t.Run("break", func(t *testing.T) {
|
|
names := []string{}
|
|
contents := []string{}
|
|
files.Range(func(name, content string) bool {
|
|
names = append(names, name)
|
|
contents = append(contents, content)
|
|
return false
|
|
})
|
|
if len(names) != 1 {
|
|
t.Fatalf("expected names len = 1, got %d", len(names))
|
|
}
|
|
if len(contents) != 1 {
|
|
t.Fatalf("expected contents len = 1, got %d", len(contents))
|
|
}
|
|
if files[names[0]] != contents[0] {
|
|
t.Fatalf("name does not match content: %v -> %v", names[0], contents[0])
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFail(t *testing.T) {
|
|
t.Run("ExecutionError", func(t *testing.T) {
|
|
err := NewExecutionError("failed", errors.New("inner error"))
|
|
out := Fail("42", err)
|
|
if out.ID != "42" {
|
|
t.Errorf("ID: expected 42, got %v", out.ID)
|
|
}
|
|
if out.OK {
|
|
t.Error("OK: expected false")
|
|
}
|
|
if out.Stderr != "internal error" {
|
|
t.Errorf("Stderr: expected %q, got %q", "internal error", out.Stderr)
|
|
}
|
|
if out.Stdout != "" {
|
|
t.Errorf("Stdout: expected empty, got %q", out.Stdout)
|
|
}
|
|
if out.Err != err {
|
|
t.Errorf("Err: expected %#v, got %#v", err, out.Err)
|
|
}
|
|
})
|
|
t.Run("ErrBusy", func(t *testing.T) {
|
|
err := ErrBusy
|
|
out := Fail("42", err)
|
|
if out.ID != "42" {
|
|
t.Errorf("ID: expected 42, got %v", out.ID)
|
|
}
|
|
if out.OK {
|
|
t.Error("OK: expected false")
|
|
}
|
|
if out.Stderr != err.Error() {
|
|
t.Errorf("Stderr: expected %q, got %q", err.Error(), out.Stderr)
|
|
}
|
|
if out.Stdout != "" {
|
|
t.Errorf("Stdout: expected empty, got %q", out.Stdout)
|
|
}
|
|
if out.Err != err {
|
|
t.Errorf("Err: expected %#v, got %#v", err, out.Err)
|
|
}
|
|
})
|
|
t.Run("Error", func(t *testing.T) {
|
|
err := errors.New("user error")
|
|
out := Fail("42", err)
|
|
if out.ID != "42" {
|
|
t.Errorf("ID: expected 42, got %v", out.ID)
|
|
}
|
|
if out.OK {
|
|
t.Error("OK: expected false")
|
|
}
|
|
if out.Stderr != err.Error() {
|
|
t.Errorf("Stderr: expected %q, got %q", err.Error(), out.Stderr)
|
|
}
|
|
if out.Stdout != "" {
|
|
t.Errorf("Stdout: expected empty, got %q", out.Stdout)
|
|
}
|
|
if out.Err != nil {
|
|
t.Errorf("Err: expected nil, got %#v", out.Err)
|
|
}
|
|
})
|
|
|
|
}
|