Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(400)

Side by Side Diff: milo/appengine/frontend/main_test.go

Issue 2949783002: [milo] appengine/* -> * (Closed)
Patch Set: rebase Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « milo/appengine/frontend/main.go ('k') | milo/appengine/frontend/module-api.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file.
4
5 package frontend
6
7 import (
8 "flag"
9 "fmt"
10 "io/ioutil"
11 "net/http"
12 "net/url"
13 "path/filepath"
14 "regexp"
15 "strings"
16 "testing"
17 "time"
18
19 "golang.org/x/net/context"
20
21 "github.com/luci/gae/impl/memory"
22 "github.com/luci/luci-go/common/clock/testclock"
23 "github.com/luci/luci-go/milo/appengine/common"
24 "github.com/luci/luci-go/milo/appengine/job_source/swarming"
25 "github.com/luci/luci-go/server/auth"
26 "github.com/luci/luci-go/server/auth/authtest"
27 "github.com/luci/luci-go/server/auth/identity"
28 "github.com/luci/luci-go/server/settings"
29 "github.com/luci/luci-go/server/templates"
30
31 . "github.com/smartystreets/goconvey/convey"
32 )
33
34 type testPackage struct {
35 Data func() []common.TestBundle
36 DisplayName string
37 TemplateName string
38 }
39
40 var (
41 allPackages = []testPackage{
42 {buildbotBuildTestData, "buildbot.build", "build.html"},
43 {buildbotBuilderTestData, "buildbot.builder", "builder.html"},
44 {func() []common.TestBundle {
45 return swarming.BuildTestData("../job_source/swarming")
46 }, "swarming.build", "build.html"},
47 {swarming.LogTestData, "swarming.log", "log.html"},
48 {frontpageTestData, "frontpage", "frontpage.html"},
49 }
50 )
51
52 var generate = flag.Bool(
53 "test.generate", false, "Generate expectations instead of running tests. ")
54
55 func expectFileName(name string) string {
56 name = strings.Replace(name, " ", "_", -1)
57 name = strings.Replace(name, "/", "_", -1)
58 name = strings.Replace(name, ":", "-", -1)
59 return filepath.Join("expectations", name)
60 }
61
62 func load(name string) ([]byte, error) {
63 filename := expectFileName(name)
64 return ioutil.ReadFile(filename)
65 }
66
67 // mustWrite Writes a buffer into an expectation file. Should always work or
68 // panic. This is fine because this only runs when -generate is passed in,
69 // not during tests.
70 func mustWrite(name string, buf []byte) {
71 filename := expectFileName(name)
72 err := ioutil.WriteFile(filename, buf, 0644)
73 if err != nil {
74 panic(err)
75 }
76 }
77
78 type analyticsSettings struct {
79 AnalyticsID string `json:"analytics_id"`
80 }
81
82 func TestPages(t *testing.T) {
83 fixZeroDurationRE := regexp.MustCompile(`(Running for:|waiting) 0s?`)
84 fixZeroDuration := func(text string) string {
85 return fixZeroDurationRE.ReplaceAllLiteralString(text, "[ZERO DU RATION]")
86 }
87
88 Convey("Testing basic rendering.", t, func() {
89 c := context.Background()
90 c = memory.Use(c)
91 c = common.WithRequest(c, &http.Request{URL: &url.URL{Path: "/fo obar"}})
92 c, _ = testclock.UseTime(c, testclock.TestTimeUTC)
93 c = auth.WithState(c, &authtest.FakeState{Identity: identity.Ano nymousIdentity})
94 c = settings.Use(c, settings.New(&settings.MemoryStorage{Expirat ion: time.Second}))
95 err := settings.Set(c, "analytics", &analyticsSettings{"UA-12345 -01"}, "", "")
96 So(err, ShouldBeNil)
97 c = templates.Use(c, common.GetTemplateBundle("templates"))
98 for _, p := range allPackages {
99 Convey(fmt.Sprintf("Testing handler %q", p.DisplayName), func() {
100 for _, b := range p.Data() {
101 Convey(fmt.Sprintf("Testing: %q", b.Desc ription), func() {
102 args := b.Data
103 // This is not a path, but a fil e key, should always be "/".
104 tmplName := "pages/" + p.Templat eName
105 buf, err := templates.Render(c, tmplName, args)
106 So(err, ShouldBeNil)
107 fname := fmt.Sprintf(
108 "%s-%s.html", p.DisplayN ame, b.Description)
109 if *generate {
110 mustWrite(fname, buf)
111 } else {
112 localBuf, err := load(fn ame)
113 So(err, ShouldBeNil)
114 So(fixZeroDuration(strin g(buf)), ShouldEqual, fixZeroDuration(string(localBuf)))
115 }
116 })
117 }
118 })
119 }
120 })
121 }
OLDNEW
« no previous file with comments | « milo/appengine/frontend/main.go ('k') | milo/appengine/frontend/module-api.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698