func assertFixture(t *testing.T, name string) { orig := manifest.ManifestRandomPorts manifest.ManifestRandomPorts = false defer func() { manifest.ManifestRandomPorts = orig }() app := models.App{ Name: "httpd", Tags: map[string]string{ "Name": "httpd", "Type": "app", "System": "convox", "Rack": "convox-test", }, } data, err := ioutil.ReadFile(fmt.Sprintf("fixtures/%s.yml", name)) require.Nil(t, err) manifest, err := manifest.Load(data) require.Nil(t, err) formation, err := app.Formation(*manifest) require.Nil(t, err) pretty, err := models.PrettyJSON(formation) require.Nil(t, err) data, err = ioutil.ReadFile(fmt.Sprintf("fixtures/%s.json", name)) require.Nil(t, err) diff1 := strings.Split(strings.TrimSpace(string(data)), "\n") diff2 := strings.Split(strings.TrimSpace(pretty), "\n") diff := difflib.Diff(diff1, diff2) diffs := []string{} // bigger than max prev := 1000000 for l, d := range diff { switch d.Delta { case difflib.LeftOnly: if (l - prev) > 1 { diffs = append(diffs, "") } diffs = append(diffs, fmt.Sprintf("%04d - %s", l, d.Payload)) prev = l case difflib.RightOnly: if (l - prev) > 1 { diffs = append(diffs, "") } diffs = append(diffs, fmt.Sprintf("%04d + %s", l, d.Payload)) prev = l } } if len(diffs) > 0 { t.Errorf("Unexpected results for %s:\n%s", name, strings.Join(diffs, "\n")) } }
func TestRackStackName(t *testing.T) { r := models.App{ Name: "convox-test", } assert.Equal(t, "convox-test", r.StackName()) }
func TestAppStackName(t *testing.T) { // unbound app (no rack prefix) a := models.App{ Name: "httpd", Tags: map[string]string{ "Type": "app", "System": "convox", "Rack": "convox-test", }, } assert.Equal(t, "httpd", a.StackName()) // bound app (rack prefix, and Name tag) a = models.App{ Name: "httpd", Tags: map[string]string{ "Name": "httpd", "Type": "app", "System": "convox", "Rack": "convox-test", }, } assert.Equal(t, "convox-test-httpd", a.StackName()) }
func TestAppCronJobs(t *testing.T) { m := manifest.Manifest{ Version: "1", Services: map[string]manifest.Service{ "one": { Name: "one", Labels: manifest.Labels{ "convox.cron.task1": "00 19 * * ? ls -la", }, }, "two": { Name: "two", Labels: manifest.Labels{ "convox.cron.task2": "00 20 * * ? ls -la", "convox.cron.task3": "00 21 * * ? ls -la", }, }, }, } a := models.App{ Name: "httpd", Tags: map[string]string{ "Name": "httpd", "Type": "app", "System": "convox", "Rack": "convox-test", }, } cj := a.CronJobs(m) sort.Sort(models.CronJobs(cj)) assert.Equal(t, len(cj), 3) assert.Equal(t, cj[0].Name, "task1") assert.Equal(t, cj[0].Service.Name, "one") assert.Equal(t, cj[1].Service.Name, "two") assert.Equal(t, cj[1].Name, "task2") assert.Equal(t, cj[2].Service.Name, "two") assert.Equal(t, cj[2].Name, "task3") }
func main() { if len(os.Args) < 2 { die(fmt.Errorf("usage: fixture <docker-compose.yml>")) } os.Setenv("REGION", "test") data, err := ioutil.ReadFile(os.Args[1]) if err != nil { die(err) } app := models.App{ Name: "httpd", Tags: map[string]string{ "Name": "httpd", "Type": "app", "System": "convox", "Rack": "convox-test", }, } m, err := manifest.Load(data) if err != nil { die(err) } f, err := app.Formation(*m) if err != nil { die(err) } pretty, err := models.PrettyJSON(f) if err != nil { die(err) } fmt.Println(pretty) }