package compiler import ( "io/ioutil" "testing" "github.com/remogatto/cloud" "github.com/remogatto/prettytest" ) type testSuite struct { prettytest.Suite } var ( compiler *Compiler client *cloud.Client simpleMain string = ` package main func main() { println("Hello World!") } ` cloudTemplateProgram string = ` package main import ( "bytes" "fmt" "text/template" "github.com/remogatto/cloud" c "gogs.carducci-dante.gov.it/karmen/config.git" ) func main() { var ( config c.ConfigT data struct{ Data string } output bytes.Buffer ) client, err := cloud.Dial(config.Cloud.Url, config.Cloud.Username, config.Cloud.Password) if err != nil { fmt.Print(err) } configData, err := client.Download("Config/config.yaml") if err != nil { fmt.Print(err) } if err := c.Read(configData, &config); err != nil { fmt.Print(err) } content, err := client.Download("Templates/template.tpl") if err != nil { fmt.Print(err) } tpl, err := template.New("template.tpl").Parse(string(content)) if err != nil { fmt.Print(err) } data.Data = "Foo" err = tpl.Execute(&output, data) if err != nil { fmt.Print(err) } err = client.Mkdir("Test") if err != nil { fmt.Print(err) } err = client.Upload(output.Bytes(), "Test/foo.txt") if err != nil { fmt.Print(err) } fmt.Print("ok") } ` ) func TestRunner(t *testing.T) { prettytest.Run( t, new(testSuite), ) } func (t *testSuite) BeforeAll() { var err error compiler = New("http://localhost:8080/compile") client, err = cloud.Dial( "http://localhost:8082/remote.php/webdav/", "admin", "password", ) if err != nil { panic(err) } if !client.Exists("Templates") { if err := client.Mkdir("Templates"); err != nil { panic(err) } } templateData, err := ioutil.ReadFile("testdata/template.tpl") if err != nil { panic(err) } if err := client.Upload(templateData, "Templates/template.tpl"); err != nil { panic(err) } if !client.Exists("Config") { if err := client.Mkdir("Config"); err != nil { panic(err) } } configData, err := ioutil.ReadFile("testdata/config.yaml") if err != nil { panic(err) } if err := client.Upload(configData, "Config/config.yaml"); err != nil { panic(err) } } func (t *testSuite) TestRunSimpleMain() { program := &Program{simpleMain} result, err := compiler.Run(program) t.Nil(err) if err == nil { t.Equal("Hello World!\n", result.Events[0].Message) } } func (t *testSuite) TestCloudTemplate() { program := &Program{cloudTemplateProgram} result, err := compiler.Run(program) t.Nil(err) if err == nil { t.Equal("", result.Errors) if result.Errors == "" { t.Equal("ok", result.Events[0].Message) data, err := client.Download("Test/foo.txt") t.Nil(err) t.Equal("Foo", string(data)) } } } func (t *testSuite) After() { client.Delete("Test") }