github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/service/rest_task_history_test.go (about) 1 package service 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 "net/http/httptest" 8 "path/filepath" 9 "testing" 10 "time" 11 12 "github.com/evergreen-ci/evergreen" 13 "github.com/evergreen-ci/evergreen/auth" 14 "github.com/evergreen-ci/evergreen/db" 15 "github.com/evergreen-ci/evergreen/model/task" 16 modelutil "github.com/evergreen-ci/evergreen/model/testutil" 17 "github.com/evergreen-ci/evergreen/model/version" 18 "github.com/evergreen-ci/evergreen/testutil" 19 "github.com/evergreen-ci/render" 20 . "github.com/smartystreets/goconvey/convey" 21 ) 22 23 var testConfig = testutil.TestConfig() 24 25 func init() { 26 db.SetGlobalSessionProvider(db.SessionFactoryFromConfig(testConfig)) 27 } 28 29 func TestGetTestHistory(t *testing.T) { 30 userManager, err := auth.LoadUserManager(taskTestConfig.AuthConfig) 31 testutil.HandleTestingErr(err, t, "Failure in loading UserManager from config") 32 33 uis := UIServer{ 34 RootURL: taskTestConfig.Ui.Url, 35 Settings: *taskTestConfig, 36 UserManager: userManager, 37 } 38 39 home := evergreen.FindEvergreenHome() 40 41 uis.Render = render.New(render.Options{ 42 Directory: filepath.Join(home, WebRootPath, Templates), 43 DisableCache: true, 44 }) 45 46 testutil.HandleTestingErr(uis.InitPlugins(), t, "problem installing plugins") 47 router, err := uis.NewRouter() 48 testutil.HandleTestingErr(err, t, "Failed to create ui server router") 49 50 Convey("When retrieving the test history", t, func() { 51 testutil.HandleTestingErr(db.ClearCollections(task.Collection, version.Collection), t, 52 "Error clearing test collections") 53 project := "project-test" 54 err = modelutil.CreateTestLocalConfig(buildTestConfig, "project_test", "") 55 So(err, ShouldBeNil) 56 57 now := time.Now() 58 59 testVersion := version.Version{ 60 Id: "testVersion", 61 Revision: "fgh", 62 RevisionOrderNumber: 1, 63 Identifier: project, 64 Requester: evergreen.RepotrackerVersionRequester, 65 } 66 So(testVersion.Insert(), ShouldBeNil) 67 testVersion2 := version.Version{ 68 Id: "anotherVersion", 69 Revision: "def", 70 RevisionOrderNumber: 2, 71 Identifier: project, 72 Requester: evergreen.RepotrackerVersionRequester, 73 } 74 So(testVersion2.Insert(), ShouldBeNil) 75 testVersion3 := version.Version{ 76 Id: "testV", 77 Revision: "abcd", 78 RevisionOrderNumber: 4, 79 Identifier: project, 80 Requester: evergreen.RepotrackerVersionRequester, 81 } 82 So(testVersion3.Insert(), ShouldBeNil) 83 84 task1 := task.Task{ 85 Id: "task1", 86 DisplayName: "test", 87 BuildVariant: "osx", 88 Revision: "fgh", 89 Project: project, 90 StartTime: now, 91 RevisionOrderNumber: 1, 92 Status: evergreen.TaskFailed, 93 TestResults: []task.TestResult{ 94 task.TestResult{ 95 Status: evergreen.TestFailedStatus, 96 TestFile: "test1", 97 URL: "url", 98 StartTime: float64(now.Unix()), 99 EndTime: float64(now.Add(time.Duration(10 * time.Second)).Unix()), 100 }, 101 task.TestResult{ 102 Status: evergreen.TestSucceededStatus, 103 TestFile: "test2", 104 URL: "anotherurl", 105 StartTime: float64(now.Unix()), 106 EndTime: float64(now.Add(time.Duration(60 * time.Second)).Unix()), 107 }, 108 }, 109 } 110 So(task1.Insert(), ShouldBeNil) 111 task2 := task.Task{ 112 Id: "task2", 113 DisplayName: "test", 114 BuildVariant: "osx", 115 Revision: "fgh", 116 Project: project, 117 StartTime: now.Add(time.Duration(30 * time.Minute)), 118 RevisionOrderNumber: 2, 119 Status: evergreen.TaskFailed, 120 TestResults: []task.TestResult{ 121 task.TestResult{ 122 Status: evergreen.TestFailedStatus, 123 TestFile: "test1", 124 URL: "url", 125 StartTime: float64(now.Unix()), 126 EndTime: float64(now.Add(time.Duration(45 * time.Second)).Unix()), 127 }, 128 task.TestResult{ 129 Status: evergreen.TestFailedStatus, 130 TestFile: "test2", 131 URL: "anotherurl", 132 StartTime: float64(now.Unix()), 133 EndTime: float64(now.Add(time.Duration(30 * time.Second)).Unix()), 134 }, 135 }, 136 } 137 So(task2.Insert(), ShouldBeNil) 138 139 task3 := task.Task{ 140 Id: "task3", 141 DisplayName: "test2", 142 BuildVariant: "osx", 143 Project: project, 144 Revision: "fgh", 145 StartTime: now, 146 RevisionOrderNumber: 1, 147 Status: evergreen.TaskFailed, 148 TestResults: []task.TestResult{ 149 task.TestResult{ 150 Status: evergreen.TestFailedStatus, 151 TestFile: "test1", 152 LogId: "2", 153 }, 154 task.TestResult{ 155 Status: evergreen.TestSucceededStatus, 156 TestFile: "test3", 157 LogId: "4", 158 }, 159 }, 160 } 161 So(task3.Insert(), ShouldBeNil) 162 163 url, err := router.Get("test_history").URL("project_id", project) 164 So(err, ShouldBeNil) 165 166 request, err := http.NewRequest("GET", url.String()+"?tasks=test,test2&limit=20", nil) 167 So(err, ShouldBeNil) 168 169 response := httptest.NewRecorder() 170 // Need match variables to be set so can call mux.Vars(request) 171 // in the actual handler function 172 router.ServeHTTP(response, request) 173 So(response.Code, ShouldEqual, http.StatusOK) 174 Convey("response should be a list of test results", func() { 175 var results []RestTestHistoryResult 176 err = json.Unmarshal(response.Body.Bytes(), &results) 177 So(err, ShouldBeNil) 178 So(len(results), ShouldEqual, 4) 179 So(results[0].TestFile, ShouldEqual, "test2") 180 So(results[0].TaskName, ShouldEqual, "test") 181 So(results[0].TestStatus, ShouldEqual, evergreen.TestFailedStatus) 182 So(results[0].TaskStatus, ShouldEqual, evergreen.TaskFailed) 183 So(results[0].Revision, ShouldEqual, "fgh") 184 So(results[0].Project, ShouldEqual, project) 185 So(results[0].TaskId, ShouldEqual, "task2") 186 So(results[0].BuildVariant, ShouldEqual, "osx") 187 So(results[0].StartTime.Unix(), ShouldResemble, int64(task2.TestResults[1].StartTime)) 188 So(results[0].DurationMS, ShouldEqual, time.Duration(30*time.Second)) 189 So(results[0].Url, ShouldEqual, "anotherurl") 190 191 So(results[1].Url, ShouldEqual, "url") 192 So(results[2].Url, ShouldEqual, "url") 193 So(results[3].Url, ShouldEqual, fmt.Sprintf("%v/test_log/2", taskTestConfig.Ui.Url)) 194 }) 195 }) 196 }