This is an automated email from the ASF dual-hosted git repository.

ccondit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-core.git


The following commit(s) were added to refs/heads/master by this push:
     new dd98009c [YUNIKORN-1805] Create smoke test to validate application 
tracking via REST interface (#624)
dd98009c is described below

commit dd98009c42da1d3284bc1846c277129c58e079c7
Author: Peter Bacsko <[email protected]>
AuthorDate: Wed Aug 23 10:14:39 2023 -0500

    [YUNIKORN-1805] Create smoke test to validate application tracking via REST 
interface (#624)
    
    Closes: #624
    
    Signed-off-by: Craig Condit <[email protected]>
---
 pkg/entrypoint/entrypoint.go                     |  11 +
 pkg/scheduler/tests/application_tracking_test.go | 261 +++++++++++++++++++++++
 pkg/scheduler/tests/mockscheduler_test.go        |  10 +-
 pkg/scheduler/tests/operation_test.go            |  10 +-
 pkg/scheduler/tests/plugin_test.go               |   2 +-
 pkg/scheduler/tests/recovery_test.go             |  14 +-
 pkg/scheduler/tests/reservation_test.go          |  10 +-
 pkg/scheduler/tests/restclient.go                |  70 ++++++
 pkg/scheduler/tests/smoke_test.go                |  24 +--
 9 files changed, 375 insertions(+), 37 deletions(-)

diff --git a/pkg/entrypoint/entrypoint.go b/pkg/entrypoint/entrypoint.go
index 4f164faa..350c8171 100644
--- a/pkg/entrypoint/entrypoint.go
+++ b/pkg/entrypoint/entrypoint.go
@@ -48,6 +48,17 @@ func StartAllServices() *ServiceContext {
                })
 }
 
+// VisibleForTesting
+func StartAllServicesWithParams(manualSchedule, withWebapp bool) 
*ServiceContext {
+       log.Log(log.Entrypoint).Info("ServiceContext start all services")
+       return startAllServicesWithParameters(
+               startupOptions{
+                       manualScheduleFlag: manualSchedule,
+                       startWebAppFlag:    withWebapp,
+                       metricsHistorySize: 1440,
+               })
+}
+
 func StartAllServicesWithLogger(logger *zap.Logger, zapConfigs *zap.Config) 
*ServiceContext {
        log.InitializeLogger(logger, zapConfigs)
        return StartAllServices()
diff --git a/pkg/scheduler/tests/application_tracking_test.go 
b/pkg/scheduler/tests/application_tracking_test.go
new file mode 100644
index 00000000..077ffd1c
--- /dev/null
+++ b/pkg/scheduler/tests/application_tracking_test.go
@@ -0,0 +1,261 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package tests
+
+import (
+       "testing"
+       "time"
+
+       "gotest.tools/v3/assert"
+
+       "github.com/apache/yunikorn-core/pkg/common"
+       "github.com/apache/yunikorn-scheduler-interface/lib/go/si"
+)
+
+const configDataSmokeTestNoLimits = `
+partitions:
+  - name: default
+    queues:
+      - name: root
+        submitacl: "*"
+        queues:
+          - name: singleleaf
+`
+
+func TestApplicationHistoryTracking(t *testing.T) {
+       // Register RM
+       ms := &mockScheduler{}
+       defer ms.Stop()
+       err := ms.Init(configDataSmokeTestNoLimits, true, true)
+       assert.NilError(t, err, "RegisterResourceManager failed")
+
+       // Check queue events
+       client := RClient{}
+       events, err := client.GetEvents()
+       assert.NilError(t, err)
+       assert.Equal(t, 2, len(events.EventRecords), "number of events 
generated")
+       verifyQueueEvents(t, events.EventRecords)
+
+       // Register a node & check events
+       err = ms.proxy.UpdateNode(&si.NodeRequest{
+               Nodes: []*si.NodeInfo{
+                       {
+                               NodeID:     "node-1:1234",
+                               Attributes: map[string]string{},
+                               SchedulableResource: &si.Resource{
+                                       Resources: map[string]*si.Quantity{
+                                               "memory": {Value: 100000000},
+                                               "vcore":  {Value: 20000},
+                                       },
+                               },
+                               Action: si.NodeInfo_CREATE,
+                       },
+               },
+               RmID: "rm:123",
+       })
+       assert.NilError(t, err, "NodeRequest failed")
+       ms.mockRM.waitForAcceptedNode(t, "node-1:1234", 1000)
+       events, err = client.GetEvents()
+       assert.NilError(t, err)
+       assert.Equal(t, 4, len(events.EventRecords), "number of events 
generated")
+       verifyNodeAddedEvents(t, events.EventRecords[2:])
+
+       // Add application & check events
+       err = ms.proxy.UpdateApplication(&si.ApplicationRequest{
+               New:  newAddAppRequest(map[string]string{appID1: 
"root.singleleaf"}),
+               RmID: "rm:123",
+       })
+       assert.NilError(t, err, "ApplicationRequest failed")
+       ms.mockRM.waitForAcceptedApplication(t, appID1, 1000)
+       events, err = client.GetEvents()
+       assert.NilError(t, err)
+       assert.Equal(t, 6, len(events.EventRecords), "number of events 
generated")
+       verifyAppAddedEvents(t, events.EventRecords[4:])
+
+       // Add allocation ask & check events
+       err = ms.proxy.UpdateAllocation(&si.AllocationRequest{
+               Asks: []*si.AllocationAsk{
+                       {
+                               AllocationKey: "alloc-1",
+                               ResourceAsk: &si.Resource{
+                                       Resources: map[string]*si.Quantity{
+                                               "memory": {Value: 10000000},
+                                               "vcore":  {Value: 1000},
+                                       },
+                               },
+                               MaxAllocations: 1,
+                               ApplicationID:  appID1,
+                       },
+               },
+               RmID: "rm:123",
+       })
+       assert.NilError(t, err, "AllocationRequest failed")
+       ms.mockRM.waitForAllocations(t, 1, 1000)
+       events, err = client.GetEvents()
+       assert.NilError(t, err)
+       assert.Equal(t, 11, len(events.EventRecords), "number of events 
generated")
+       verifyAllocationAskAddedEvents(t, events.EventRecords[6:])
+
+       allocations := ms.mockRM.getAllocations()
+       assert.Equal(t, 1, len(allocations), "number of allocations")
+       var uuid string
+       for key := range allocations {
+               uuid = key
+       }
+
+       // terminate allocation & check events
+       err = ms.proxy.UpdateAllocation(&si.AllocationRequest{
+               Releases: &si.AllocationReleasesRequest{
+                       AllocationsToRelease: []*si.AllocationRelease{
+                               {
+                                       ApplicationID:   appID1,
+                                       PartitionName:   "default",
+                                       UUID:            uuid,
+                                       TerminationType: 
si.TerminationType_STOPPED_BY_RM,
+                               },
+                       },
+               },
+               RmID: "rm:123",
+       })
+       assert.NilError(t, err, "AllocationRequest failed")
+
+       // make sure app transitions to Completing
+       app := ms.getApplication(appID1)
+       err = common.WaitFor(time.Millisecond*10, time.Second, func() bool {
+               return app.IsCompleting()
+       })
+       assert.NilError(t, err, "timeout waiting for app state Completing")
+
+       events, err = client.GetEvents()
+       assert.NilError(t, err)
+       assert.Equal(t, 14, len(events.EventRecords), "number of events 
generated")
+       verifyAllocationCancelledEvents(t, events.EventRecords[11:])
+}
+
+func verifyQueueEvents(t *testing.T, events []*si.EventRecord) {
+       assert.Equal(t, "root", events[0].ObjectID)
+       assert.Equal(t, "", events[0].Message)
+       assert.Equal(t, "", events[0].ReferenceID)
+       assert.Equal(t, si.EventRecord_ADD, events[0].EventChangeType)
+       assert.Equal(t, si.EventRecord_DETAILS_NONE, 
events[0].EventChangeDetail)
+
+       assert.Equal(t, "root.singleleaf", events[1].ObjectID)
+       assert.Equal(t, "", events[1].Message)
+       assert.Equal(t, "", events[1].ReferenceID)
+       assert.Equal(t, si.EventRecord_ADD, events[1].EventChangeType)
+       assert.Equal(t, si.EventRecord_DETAILS_NONE, 
events[1].EventChangeDetail)
+}
+
+func verifyNodeAddedEvents(t *testing.T, events []*si.EventRecord) {
+       assert.Equal(t, "node-1:1234", events[0].ObjectID)
+       assert.Equal(t, "schedulable: true", events[0].Message)
+       assert.Equal(t, "", events[0].ReferenceID)
+       assert.Equal(t, si.EventRecord_NODE, events[0].Type)
+       assert.Equal(t, si.EventRecord_SET, events[0].EventChangeType)
+       assert.Equal(t, si.EventRecord_NODE_SCHEDULABLE, 
events[0].EventChangeDetail)
+
+       assert.Equal(t, "node-1:1234", events[1].ObjectID)
+       assert.Equal(t, "", events[1].Message)
+       assert.Equal(t, "", events[1].ReferenceID)
+       assert.Equal(t, si.EventRecord_NODE, events[1].Type)
+       assert.Equal(t, si.EventRecord_ADD, events[1].EventChangeType)
+       assert.Equal(t, si.EventRecord_DETAILS_NONE, 
events[1].EventChangeDetail)
+}
+
+func verifyAppAddedEvents(t *testing.T, events []*si.EventRecord) {
+       assert.Equal(t, "app-1", events[0].ObjectID)
+       assert.Equal(t, "", events[0].Message)
+       assert.Equal(t, "", events[0].ReferenceID)
+       assert.Equal(t, si.EventRecord_APP, events[0].Type)
+       assert.Equal(t, si.EventRecord_ADD, events[0].EventChangeType)
+       assert.Equal(t, si.EventRecord_DETAILS_NONE, 
events[0].EventChangeDetail)
+
+       assert.Equal(t, "root.singleleaf", events[1].ObjectID)
+       assert.Equal(t, "", events[1].Message)
+       assert.Equal(t, "app-1", events[1].ReferenceID)
+       assert.Equal(t, si.EventRecord_QUEUE, events[1].Type)
+       assert.Equal(t, si.EventRecord_ADD, events[1].EventChangeType)
+       assert.Equal(t, si.EventRecord_QUEUE_APP, events[1].EventChangeDetail)
+}
+
+func verifyAllocationAskAddedEvents(t *testing.T, events []*si.EventRecord) {
+       // state transition to Accepted
+       assert.Equal(t, "app-1", events[0].ObjectID)
+       assert.Equal(t, "", events[0].Message)
+       assert.Equal(t, "", events[0].ReferenceID)
+       assert.Equal(t, si.EventRecord_APP, events[0].Type)
+       assert.Equal(t, si.EventRecord_SET, events[0].EventChangeType)
+       assert.Equal(t, si.EventRecord_APP_ACCEPTED, 
events[0].EventChangeDetail)
+
+       // allocation ask received
+       assert.Equal(t, "app-1", events[1].ObjectID)
+       assert.Equal(t, "", events[1].Message)
+       assert.Equal(t, "alloc-1", events[1].ReferenceID)
+       assert.Equal(t, si.EventRecord_APP, events[1].Type)
+       assert.Equal(t, si.EventRecord_ADD, events[1].EventChangeType)
+       assert.Equal(t, si.EventRecord_APP_REQUEST, events[1].EventChangeDetail)
+
+       // allocation on node
+       assert.Equal(t, "node-1:1234", events[2].ObjectID)
+       assert.Equal(t, "", events[2].Message)
+       assert.Equal(t, "alloc-1", events[2].ReferenceID)
+       assert.Equal(t, si.EventRecord_NODE, events[2].Type)
+       assert.Equal(t, si.EventRecord_ADD, events[2].EventChangeType)
+       assert.Equal(t, si.EventRecord_NODE_ALLOC, events[2].EventChangeDetail)
+
+       // state change to Starting
+       assert.Equal(t, "app-1", events[3].ObjectID)
+       assert.Equal(t, "", events[3].Message)
+       assert.Equal(t, "", events[3].ReferenceID)
+       assert.Equal(t, si.EventRecord_APP, events[3].Type)
+       assert.Equal(t, si.EventRecord_SET, events[3].EventChangeType)
+       assert.Equal(t, si.EventRecord_APP_STARTING, 
events[3].EventChangeDetail)
+
+       // adding allocation to the App
+       assert.Equal(t, "app-1", events[4].ObjectID)
+       assert.Equal(t, "", events[4].Message)
+       assert.Equal(t, si.EventRecord_APP, events[4].Type)
+       assert.Equal(t, si.EventRecord_ADD, events[4].EventChangeType)
+       assert.Equal(t, si.EventRecord_APP_ALLOC, events[4].EventChangeDetail)
+}
+
+func verifyAllocationCancelledEvents(t *testing.T, events []*si.EventRecord) {
+       // state transition to Completing
+       assert.Equal(t, "app-1", events[0].ObjectID)
+       assert.Equal(t, "", events[0].Message)
+       assert.Equal(t, "", events[0].ReferenceID)
+       assert.Equal(t, si.EventRecord_APP, events[0].Type)
+       assert.Equal(t, si.EventRecord_SET, events[0].EventChangeType)
+       assert.Equal(t, si.EventRecord_APP_COMPLETING, 
events[0].EventChangeDetail)
+
+       // cancel allocation
+       assert.Equal(t, "app-1", events[1].ObjectID)
+       assert.Equal(t, "", events[1].Message)
+       assert.Equal(t, si.EventRecord_APP, events[1].Type)
+       assert.Equal(t, si.EventRecord_REMOVE, events[1].EventChangeType)
+       assert.Equal(t, si.EventRecord_ALLOC_CANCEL, 
events[1].EventChangeDetail)
+
+       // remove allocation from the node
+       assert.Equal(t, "node-1:1234", events[2].ObjectID)
+       assert.Equal(t, "", events[2].Message)
+       assert.Equal(t, "alloc-1", events[2].ReferenceID)
+       assert.Equal(t, si.EventRecord_NODE, events[2].Type)
+       assert.Equal(t, si.EventRecord_REMOVE, events[2].EventChangeType)
+       assert.Equal(t, si.EventRecord_NODE_ALLOC, events[2].EventChangeDetail)
+}
diff --git a/pkg/scheduler/tests/mockscheduler_test.go 
b/pkg/scheduler/tests/mockscheduler_test.go
index 9008c83b..125308fd 100644
--- a/pkg/scheduler/tests/mockscheduler_test.go
+++ b/pkg/scheduler/tests/mockscheduler_test.go
@@ -41,19 +41,15 @@ type mockScheduler struct {
 // MultiStepSchedule(int) to allocate.
 // Auto scheduling does not give control over the scheduling steps and should 
only
 // be used in specific use case testing.
-func (m *mockScheduler) Init(config string, autoSchedule bool) error {
+func (m *mockScheduler) Init(config string, autoSchedule bool, withWebapp 
bool) error {
        m.rmID = "rm:123"
        m.partitionName = common.GetNormalizedPartitionName("default", m.rmID)
 
        BuildInfoMap := make(map[string]string)
        BuildInfoMap["k"] = "v"
 
-       // Start all tests
-       if autoSchedule {
-               m.serviceContext = entrypoint.StartAllServices()
-       } else {
-               m.serviceContext = 
entrypoint.StartAllServicesWithManualScheduler()
-       }
+       m.serviceContext = entrypoint.StartAllServicesWithParams(!autoSchedule, 
withWebapp)
+
        m.proxy = m.serviceContext.RMProxy
        m.scheduler = m.serviceContext.Scheduler
 
diff --git a/pkg/scheduler/tests/operation_test.go 
b/pkg/scheduler/tests/operation_test.go
index 73943966..f2be70e1 100644
--- a/pkg/scheduler/tests/operation_test.go
+++ b/pkg/scheduler/tests/operation_test.go
@@ -55,7 +55,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Check queues of cache and scheduler.
@@ -183,7 +183,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Check queues of cache and scheduler.
@@ -331,7 +331,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Check queues of cache and scheduler.
@@ -447,7 +447,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Check queues of cache and scheduler.
@@ -566,7 +566,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Check queues of cache and scheduler.
diff --git a/pkg/scheduler/tests/plugin_test.go 
b/pkg/scheduler/tests/plugin_test.go
index c736e891..5ee616c8 100644
--- a/pkg/scheduler/tests/plugin_test.go
+++ b/pkg/scheduler/tests/plugin_test.go
@@ -64,7 +64,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, true)
+       err := ms.Init(configData, true, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // register a fake container state updater for testing
diff --git a/pkg/scheduler/tests/recovery_test.go 
b/pkg/scheduler/tests/recovery_test.go
index 38c1b678..81415a63 100644
--- a/pkg/scheduler/tests/recovery_test.go
+++ b/pkg/scheduler/tests/recovery_test.go
@@ -55,7 +55,7 @@ func TestSchedulerRecovery(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Check queues of scheduler.GetClusterContext() and scheduler.
@@ -233,7 +233,7 @@ func TestSchedulerRecovery(t *testing.T) {
        mockRM := ms.mockRM
        ms.serviceContext.StopAll()
        // restart
-       err = ms.Init(configData, false)
+       err = ms.Init(configData, false, false)
        assert.NilError(t, err, "2nd RegisterResourceManager failed")
 
        // Register nodes, and add apps
@@ -343,7 +343,7 @@ func TestSchedulerRecovery2Allocations(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Register node, and add app
@@ -411,7 +411,7 @@ func TestSchedulerRecovery2Allocations(t *testing.T) {
        mockRM := ms.mockRM
        ms.serviceContext.StopAll()
        // restart
-       err = ms.Init(configData, false)
+       err = ms.Init(configData, false, false)
        assert.NilError(t, err, "2nd RegisterResourceManager failed")
 
        // Register nodes, and add apps
@@ -453,7 +453,7 @@ func TestSchedulerRecoveryWithoutAppInfo(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Register nodes, and add apps
@@ -725,7 +725,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // initially there is only 1 root queue exist
@@ -860,7 +860,7 @@ partitions:
        ms.serviceContext.StopAll()
 
        // restart
-       err = ms.Init(configData, false)
+       err = ms.Init(configData, false, false)
        assert.NilError(t, err, "2nd RegisterResourceManager failed")
        part = ms.scheduler.GetClusterContext().GetPartition(ms.partitionName)
        rootQ = part.GetQueue("root")
diff --git a/pkg/scheduler/tests/reservation_test.go 
b/pkg/scheduler/tests/reservation_test.go
index 163cf245..a81b1032 100644
--- a/pkg/scheduler/tests/reservation_test.go
+++ b/pkg/scheduler/tests/reservation_test.go
@@ -85,7 +85,7 @@ func TestBasicReservation(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(SingleQueueConfig, false)
+       err := ms.Init(SingleQueueConfig, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // override the reservation delay, and cleanup when done
@@ -161,7 +161,7 @@ func TestReservationForTwoQueues(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(DualQueueConfig, false)
+       err := ms.Init(DualQueueConfig, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
        // override the reservation delay, and cleanup when done
        objects.SetReservationDelay(10 * time.Nanosecond)
@@ -265,7 +265,7 @@ func TestRemoveReservedNode(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(SingleQueueConfig, false)
+       err := ms.Init(SingleQueueConfig, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
        // override the reservation delay, and cleanup when done
        objects.SetReservationDelay(10 * time.Nanosecond)
@@ -316,7 +316,7 @@ func TestAddNewNode(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(SingleQueueConfig, false)
+       err := ms.Init(SingleQueueConfig, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // override the reservation delay, and cleanup when done
@@ -374,7 +374,7 @@ func TestUnReservationAndDeletion(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(SingleQueueConfig, false)
+       err := ms.Init(SingleQueueConfig, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // override the reservation delay, and cleanup when done
diff --git a/pkg/scheduler/tests/restclient.go 
b/pkg/scheduler/tests/restclient.go
new file mode 100644
index 00000000..9ff09698
--- /dev/null
+++ b/pkg/scheduler/tests/restclient.go
@@ -0,0 +1,70 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package tests
+
+import (
+       "encoding/json"
+       "io"
+       "net/http"
+       "net/url"
+
+       "github.com/apache/yunikorn-core/pkg/webservice/dao"
+)
+
+type RClient struct {
+       BaseURL *url.URL
+}
+
+func (c *RClient) GetEvents() (*dao.EventRecordDAO, error) {
+       req, err := c.newRequest("GET", "ws/v1/events/batch")
+       if err != nil {
+               return nil, err
+       }
+       var events *dao.EventRecordDAO
+       _, err = c.do(req, &events)
+       return events, err
+}
+
+func (c *RClient) newRequest(method, path string) (*http.Request, error) {
+       rel := &url.URL{Path: path}
+       wsUrl := &url.URL{
+               Host:   "localhost:9080",
+               Scheme: "http",
+       }
+
+       u := wsUrl.ResolveReference(rel)
+       var buf io.ReadWriter
+       req, err := http.NewRequest(method, u.String(), buf)
+       if err != nil {
+               return nil, err
+       }
+       req.Header.Set("Accept", "application/json")
+       req.Header.Set("User-Agent", "Golang_Spider_Bot/3.0")
+       return req, nil
+}
+
+func (c *RClient) do(req *http.Request, v interface{}) (*http.Response, error) 
{
+       resp, err := http.DefaultClient.Do(req)
+       if err != nil {
+               return nil, err
+       }
+       defer resp.Body.Close()
+       err = json.NewDecoder(resp.Body).Decode(v)
+       return resp, err
+}
diff --git a/pkg/scheduler/tests/smoke_test.go 
b/pkg/scheduler/tests/smoke_test.go
index 57411ef1..759f364a 100644
--- a/pkg/scheduler/tests/smoke_test.go
+++ b/pkg/scheduler/tests/smoke_test.go
@@ -65,7 +65,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // memorize the checksum of current configs
@@ -162,7 +162,7 @@ func TestBasicScheduler(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configDataSmokeTest, false)
+       err := ms.Init(configDataSmokeTest, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        leafName := "root.singleleaf"
@@ -384,7 +384,7 @@ func TestBasicSchedulerAutoAllocation(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configDataSmokeTest, true)
+       err := ms.Init(configDataSmokeTest, true, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        leafName := "root.singleleaf"
@@ -491,7 +491,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        leafApp1 := "root.leaf1"
@@ -614,7 +614,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        leafName := "root.leaf"
@@ -739,7 +739,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Register a node, and add applications
@@ -830,7 +830,7 @@ partitions:
                        ms := &mockScheduler{}
                        defer ms.Stop()
 
-                       err := ms.Init(param.configData, false)
+                       err := ms.Init(param.configData, false, false)
                        assert.NilError(t, err, "RegisterResourceManager failed 
in run %s", param.name)
 
                        // Register a node, and add applications
@@ -942,7 +942,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        node1ID := "node-1:1234"
@@ -1064,7 +1064,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        leafName := "root.leaf"
@@ -1182,7 +1182,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Register 10 nodes, and add applications
@@ -1283,7 +1283,7 @@ func TestDupReleasesInGangScheduling(t *testing.T) {
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configDataSmokeTest, false)
+       err := ms.Init(configDataSmokeTest, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        leafName := "root.singleleaf"
@@ -1469,7 +1469,7 @@ partitions:
        ms := &mockScheduler{}
        defer ms.Stop()
 
-       err := ms.Init(configData, false)
+       err := ms.Init(configData, false, false)
        assert.NilError(t, err, "RegisterResourceManager failed")
 
        // Check queues of cache and scheduler.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to