diff --git a/examples/client.go b/examples/client.go index cd6d726..23ffdc8 100644 --- a/examples/client.go +++ b/examples/client.go @@ -582,6 +582,21 @@ func main() { fmt.Print(result.String()) + case "getPendingReasons": + fmt.Println("Getting pending reasons") + taskQ := &aurora.TaskQuery{ + Role: &job.JobKey().Role, + Environment: &job.JobKey().Environment, + JobName: &job.JobKey().Name, + } + reasons, err := r.GetPendingReason(taskQ) + if err != nil { + log.Fatalf("error: %+v\n ", err) + } + + fmt.Printf("length: %d\n ", len(reasons)) + fmt.Printf("tasks: %+v\n", reasons) + case "getJobs": fmt.Println("GetJobs...role: ", role) _, result, err := r.GetJobs(role) diff --git a/realis.go b/realis.go index 62a9236..665eb25 100644 --- a/realis.go +++ b/realis.go @@ -1072,7 +1072,6 @@ func (r *realisClient) EndMaintenance(hosts ...string) (*aurora.Response, *auror return resp, result, nil } - func (r *realisClient) MaintenanceStatus(hosts ...string) (*aurora.Response, *aurora.MaintenanceStatusResult_, error) { var result *aurora.MaintenanceStatusResult_ diff --git a/realis_e2e_test.go b/realis_e2e_test.go index 3ea41ec..7c7d25d 100644 --- a/realis_e2e_test.go +++ b/realis_e2e_test.go @@ -90,6 +90,70 @@ func TestNonExistentEndpoint(t *testing.T) { } +func TestThriftBinary(t *testing.T) { + r, err := realis.NewRealisClient(realis.SchedulerUrl("http://192.168.33.7:8081"), + realis.BasicAuth("aurora", "secret"), + realis.TimeoutMS(20000), + realis.ThriftBinary()) + + assert.NoError(t, err) + + role := "all" + taskQ := &aurora.TaskQuery{ + Role: &role, + } + + // Perform a simple API call to test Thrift Binary + _, err = r.GetTasksWithoutConfigs(taskQ) + + assert.NoError(t, err) + + r.Close() + +} + +func TestThriftJSON(t *testing.T) { + r, err := realis.NewRealisClient(realis.SchedulerUrl("http://192.168.33.7:8081"), + realis.BasicAuth("aurora", "secret"), + realis.TimeoutMS(20000), + realis.ThriftJSON()) + + assert.NoError(t, err) + + role := "all" + taskQ := &aurora.TaskQuery{ + Role: &role, + } + + // Perform a simple API call to test Thrift Binary + _, err = r.GetTasksWithoutConfigs(taskQ) + + assert.NoError(t, err) + + r.Close() + +} + +func TestNoopLogger(t *testing.T) { + r, err := realis.NewRealisClient(realis.SchedulerUrl("http://192.168.33.7:8081"), + realis.BasicAuth("aurora", "secret"), + realis.SetLogger(realis.NoopLogger{})) + + assert.NoError(t, err) + + role := "all" + taskQ := &aurora.TaskQuery{ + Role: &role, + } + + // Perform a simple API call to test Thrift Binary + _, err = r.GetTasksWithoutConfigs(taskQ) + + assert.NoError(t, err) + + r.Close() +} + func TestLeaderFromZK(t *testing.T) { cluster := realis.GetDefaultClusterFromZKUrl("192.168.33.2:2181") url, err := realis.LeaderFromZK(*cluster) @@ -122,20 +186,17 @@ func TestRealisClient_CreateJob_Thermos(t *testing.T) { Name("create_thermos_job_test"). ExecutorName(aurora.AURORA_EXECUTOR_NAME). ExecutorData(string(thermosPayload)). - CPU(1). + CPU(.5). RAM(64). Disk(100). IsService(true). - InstanceCount(1). + InstanceCount(2). AddPorts(1) - start := time.Now() resp, err := r.CreateJob(job) - end := time.Now() assert.NoError(t, err) assert.Equal(t, aurora.ResponseCode_OK, resp.ResponseCode) - fmt.Printf("Create call took %d ns\n", (end.UnixNano() - start.UnixNano())) // Test Instances Monitor success, err := monitor.Instances(job.JobKey(), job.GetInstanceCount(), 1, 50) @@ -145,7 +206,7 @@ func TestRealisClient_CreateJob_Thermos(t *testing.T) { //Fetch all Jobs _, result, err := r.GetJobs(role) fmt.Printf("GetJobs length: %+v \n", len(result.Configs)) - assert.Equal(t, len(result.Configs), 1) + assert.Len(t, result.Configs, 1) assert.NoError(t, err) // Test asking the scheduler to perform a Snpshot @@ -162,13 +223,14 @@ func TestRealisClient_CreateJob_Thermos(t *testing.T) { // Tasks must exist for it to, be killed t.Run("TestRealisClient_KillJob_Thermos", func(t *testing.T) { - start := time.Now() resp, err := r.KillJob(job.JobKey()) - end := time.Now() assert.NoError(t, err) assert.Equal(t, aurora.ResponseCode_OK, resp.ResponseCode) - fmt.Printf("Kill call took %d ns\n", (end.UnixNano() - start.UnixNano())) + + success, err := monitor.Instances(job.JobKey(), 0, 1, 50) + assert.True(t, success) + assert.NoError(t, err) }) } @@ -192,6 +254,43 @@ func TestRealisClient_CreateJob_ExecutorDoesNotExist(t *testing.T) { assert.Equal(t, aurora.ResponseCode_INVALID_REQUEST, resp.GetResponseCode()) } +// Test configuring an executor that doesn't exist for CreateJob API +func TestRealisClient_GetPendingReason(t *testing.T) { + + env := "prod" + role := "vagrant" + name := "pending_reason_test" + + // Create a single job + job := realis.NewJob(). + Environment(env). + Role(role). + Name(name). + ExecutorName(aurora.AURORA_EXECUTOR_NAME). + ExecutorData(string(thermosPayload)). + CPU(1000). + RAM(64). + Disk(100). + InstanceCount(1) + + resp, err := r.CreateJob(job) + assert.NoError(t, err) + assert.Equal(t, aurora.ResponseCode_OK, resp.ResponseCode) + + taskQ := &aurora.TaskQuery{ + Role: &role, + Environment: &env, + JobName: &name, + } + + reasons, err := r.GetPendingReason(taskQ) + assert.NoError(t, err) + assert.Len(t, reasons, 1) + + resp, err = r.KillJob(job.JobKey()) + assert.NoError(t, err) +} + func TestRealisClient_CreateService_WithPulse_Thermos(t *testing.T) { fmt.Println("Creating service") @@ -394,6 +493,34 @@ func TestRealisClient_ScheduleCronJob_Thermos(t *testing.T) { fmt.Printf("Deschedule cron call took %d ns\n", (end.UnixNano() - start.UnixNano())) }) } +func TestRealisClient_StartMaintenance(t *testing.T) { + hosts := []string{"localhost"} + _, _, err := r.StartMaintenance(hosts...) + if err != nil { + fmt.Printf("error: %+v\n", err.Error()) + os.Exit(1) + } + + // Monitor change to DRAINING and DRAINED mode + hostResults, err := monitor.HostMaintenance( + hosts, + []aurora.MaintenanceMode{aurora.MaintenanceMode_SCHEDULED}, + 1, + 50) + assert.Equal(t, map[string]bool{"localhost": true}, hostResults) + assert.NoError(t, err) + + _, _, err = r.EndMaintenance(hosts...) + assert.NoError(t, err) + + // Monitor change to DRAINING and DRAINED mode + _, err = monitor.HostMaintenance( + hosts, + []aurora.MaintenanceMode{aurora.MaintenanceMode_NONE}, + 5, + 10) + assert.NoError(t, err) +} func TestRealisClient_DrainHosts(t *testing.T) { hosts := []string{"localhost"} @@ -427,10 +554,7 @@ func TestRealisClient_DrainHosts(t *testing.T) { t.Run("TestRealisClient_EndMaintenance", func(t *testing.T) { _, _, err := r.EndMaintenance(hosts...) - if err != nil { - fmt.Printf("error: %+v\n", err.Error()) - os.Exit(1) - } + assert.NoError(t, err) // Monitor change to DRAINING and DRAINED mode _, err = monitor.HostMaintenance(