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  }