@@ -6,138 +6,146 @@ import (
66 "testing"
77 "time"
88
9+ "github.com/google/uuid"
910 v1 "github.com/odpf/optimus/api/handler/v1beta1"
1011 pb "github.com/odpf/optimus/api/proto/odpf/optimus/core/v1beta1"
12+ "github.com/odpf/optimus/core/progress"
1113
12- "github.com/google/uuid"
1314 "github.com/odpf/optimus/mock"
1415 "github.com/odpf/optimus/models"
1516 "github.com/odpf/salt/log"
1617 "github.com/stretchr/testify/assert"
1718 mock2 "github.com/stretchr/testify/mock"
19+ "github.com/stretchr/testify/suite"
1820)
1921
20- func TestJobSpecificationOnServer (t * testing.T ) {
21- log := log .NewNoop ()
22- ctx := context .Background ()
23-
24- t .Run ("DeployJobSpecification" , func (t * testing.T ) {
25- t .Run ("should deploy the job" , func (t * testing.T ) {
26- Version := "1.0.1"
27-
28- projectName := "a-data-project"
29- jobName1 := "a-data-job"
30- taskName := "a-data-task"
31-
32- projectSpec := models.ProjectSpec {
33- ID : uuid .Must (uuid .NewRandom ()),
34- Name : projectName ,
35- Config : map [string ]string {
36- "bucket" : "gs://some_folder" ,
37- },
38- }
39-
40- namespaceSpec := models.NamespaceSpec {
41- ID : uuid .Must (uuid .NewRandom ()),
42- Name : "dev-test-namespace-1" ,
43- Config : map [string ]string {
44- "bucket" : "gs://some_folder" ,
45- },
46- ProjectSpec : projectSpec ,
47- }
48-
49- execUnit1 := new (mock.BasePlugin )
50- execUnit1 .On ("PluginInfo" ).Return (& models.PluginInfoResponse {
51- Name : taskName ,
52- }, nil )
53- defer execUnit1 .AssertExpectations (t )
54-
55- jobSpecs := []models.JobSpec {
56- {
57- Name : jobName1 ,
58- Task : models.JobSpecTask {
59- Unit : & models.Plugin {
60- Base : execUnit1 ,
61- },
62- Config : models.JobSpecConfigs {
63- {
64- Name : "do" ,
65- Value : "this" ,
66- },
67- },
68- },
69- Assets : * models.JobAssets {}.New (
70- []models.JobSpecAsset {
71- {
72- Name : "query.sql" ,
73- Value : "select * from 1" ,
74- },
75- }),
76- },
77- }
78-
79- jobSpecRepository := new (mock.JobSpecRepository )
80- defer jobSpecRepository .AssertExpectations (t )
81-
82- jobSpecRepoFactory := new (mock.JobSpecRepoFactory )
83- defer jobSpecRepoFactory .AssertExpectations (t )
84-
85- pluginRepo := new (mock.SupportedPluginRepo )
86- pluginRepo .On ("GetByName" , taskName ).Return (& models.Plugin {
87- Base : execUnit1 ,
88- }, nil )
89- adapter := v1 .NewAdapter (pluginRepo , nil )
90-
91- nsService := new (mock.NamespaceService )
92- nsService .On ("Get" , ctx , projectSpec .Name , namespaceSpec .Name ).Return (namespaceSpec , nil )
93- defer nsService .AssertExpectations (t )
94-
95- projectJobSpecRepository := new (mock.ProjectJobSpecRepository )
96- defer projectJobSpecRepository .AssertExpectations (t )
97-
98- projectJobSpecRepoFactory := new (mock.ProjectJobSpecRepoFactory )
99- defer projectJobSpecRepoFactory .AssertExpectations (t )
100-
101- jobService := new (mock.JobService )
102- jobService .On ("Create" , ctx , mock2 .Anything , namespaceSpec ).Return (nil )
103- jobService .On ("KeepOnly" , ctx , namespaceSpec , mock2 .Anything , mock2 .Anything ).Return (nil )
104- jobService .On ("Sync" , mock2 .Anything , namespaceSpec , mock2 .Anything ).Return (nil )
105- defer jobService .AssertExpectations (t )
22+ type RuntimeServiceServerTestSuite struct {
23+ suite.Suite
24+ version string
25+ ctx context.Context
26+ namespaceService * mock.NamespaceService
27+ projectService * mock.ProjectService
28+ secretService * mock.SecretService
29+ runService * mock.RunService // TODO: refactor to service package
30+ jobService * mock.JobService // TODO: refactor to service package
31+ resourceService models.DatastoreService // TODO: refactor to service package
32+ jobEventService v1.JobEventService // TODO: refactor to service package
33+ adapter * mock.ProtoAdapter
34+ scheduler models.SchedulerUnit
35+ log log.Logger
36+ progressObserver progress.Observer
37+
38+ req * pb.DeployJobSpecificationRequest
39+ projectSpec models.ProjectSpec
40+ namespaceSpec models.NamespaceSpec
41+ }
10642
107- jobSpecsAdapted := []* pb.JobSpecification {}
108- for _ , jobSpec := range jobSpecs {
109- jobSpecAdapted , _ := adapter .ToJobProto (jobSpec )
110- jobSpecsAdapted = append (jobSpecsAdapted , jobSpecAdapted )
111- }
43+ func (s * RuntimeServiceServerTestSuite ) SetupTest () {
44+ s .version = "v1.0.0"
45+ s .ctx = context .Background ()
46+ s .namespaceService = new (mock.NamespaceService )
47+ s .adapter = new (mock.ProtoAdapter )
48+ s .jobService = new (mock.JobService )
49+ s .log = log .NewNoop ()
50+ // ... etdc
51+
52+ s .projectSpec = models.ProjectSpec {}
53+ s .projectSpec .Name = "project-a"
54+ s .projectSpec .ID = uuid .MustParse ("26a0d6a0-13c6-4b30-ae6f-29233df70f31" )
55+
56+ s .namespaceSpec = models.NamespaceSpec {}
57+ s .namespaceSpec .Name = "ns1"
58+ s .namespaceSpec .ID = uuid .MustParse ("ceba7919-e07d-48b4-a4ce-141d79a3b59d" )
59+
60+ s .req = & pb.DeployJobSpecificationRequest {}
61+ s .req .ProjectName = s .projectSpec .Name
62+ s .req .NamespaceName = s .namespaceSpec .Name
63+ }
11264
113- grpcRespStream := new (mock.DeployJobSpecificationServer )
114- grpcRespStream .On ("Context" ).Return (context .Background ())
115- recv := & pb.DeployJobSpecificationRequest {ProjectName : projectName , Jobs : jobSpecsAdapted , NamespaceName : namespaceSpec .Name }
116- grpcRespStream .On ("Recv" ).Return (recv , nil ).Once ()
117- grpcRespStream .On ("Recv" ).Return (nil , io .EOF ).Once ()
118- grpcRespStream .On ("Send" , mock2 .Anything ).Return (nil )
119- defer grpcRespStream .AssertExpectations (t )
65+ func TestRuntimeServiceServerTestSuite (t * testing.T ) {
66+ s := new (RuntimeServiceServerTestSuite )
67+ suite .Run (t , s )
68+ }
12069
121- runtimeServiceServer := v1 .NewRuntimeServiceServer (
122- log ,
123- Version ,
124- jobService ,
125- nil , nil ,
126- nil ,
127- nsService ,
128- nil ,
129- adapter ,
130- nil ,
131- nil ,
132- nil ,
133- )
70+ func (s * RuntimeServiceServerTestSuite ) newRuntimeServiceServer () * v1.RuntimeServiceServer {
71+ return v1 .NewRuntimeServiceServer (
72+ s .log ,
73+ s .version ,
74+ s .jobService ,
75+ s .jobEventService ,
76+ s .resourceService ,
77+ s .projectService ,
78+ s .namespaceService ,
79+ s .secretService ,
80+ s .adapter ,
81+ s .progressObserver ,
82+ s .runService ,
83+ s .scheduler ,
84+ )
85+ }
13486
135- err := runtimeServiceServer .DeployJobSpecification (grpcRespStream )
87+ func (s * RuntimeServiceServerTestSuite ) TestDeployJobSpecification_Success () {
88+ s .Run ("NoJobSpec" , func () {
89+ stream := new (mock.DeployJobSpecificationServer )
90+ stream .On ("Context" ).Return (s .ctx )
91+ stream .On ("Recv" ).Return (s .req , nil ).Once ()
92+ stream .On ("Recv" ).Return (nil , io .EOF ).Once ()
93+
94+ s .namespaceService .On ("Get" , s .ctx , s .req .GetProjectName (), s .req .GetNamespaceName ()).Return (s .namespaceSpec , nil ).Once ()
95+ s .jobService .On ("KeepOnly" , s .ctx , s .namespaceSpec , mock2 .Anything , mock2 .Anything ).Return (nil ).Once ()
96+ s .jobService .On ("Sync" , s .ctx , s .namespaceSpec , mock2 .Anything ).Return (nil ).Once ()
97+ stream .On ("Send" , mock2 .Anything ).Return (nil ).Once ()
98+
99+ runtimeServiceServer := s .newRuntimeServiceServer ()
100+ err := runtimeServiceServer .DeployJobSpecification (stream )
101+
102+ s .Assert ().NoError (err )
103+ stream .AssertExpectations (s .T ())
104+ s .namespaceService .AssertExpectations (s .T ())
105+ s .jobService .AssertExpectations (s .T ())
106+ })
136107
137- assert .NoError (t , err )
138- })
108+ s .Run ("TwoJobSpec" , func () {
109+ jobSpecs := []* pb.JobSpecification {}
110+ jobSpecs = append (jobSpecs , & pb.JobSpecification {Name : "job-1" })
111+ jobSpecs = append (jobSpecs , & pb.JobSpecification {Name : "job-2" })
112+ s .req .Jobs = jobSpecs
113+ adaptedJobs := []models.JobSpec {}
114+ adaptedJobs = append (adaptedJobs , models.JobSpec {Name : "job-1" })
115+ adaptedJobs = append (adaptedJobs , models.JobSpec {Name : "job-2" })
116+
117+ stream := new (mock.DeployJobSpecificationServer )
118+ stream .On ("Context" ).Return (s .ctx )
119+ stream .On ("Recv" ).Return (s .req , nil ).Once ()
120+ stream .On ("Recv" ).Return (nil , io .EOF ).Once ()
121+
122+ s .namespaceService .On ("Get" , s .ctx , s .req .GetProjectName (), s .req .GetNamespaceName ()).Return (s .namespaceSpec , nil ).Once ()
123+ for i := range jobSpecs {
124+ s .adapter .On ("FromJobProto" , jobSpecs [i ]).Return (adaptedJobs [i ], nil ).Once ()
125+ s .jobService .On ("Create" , s .ctx , s .namespaceSpec , adaptedJobs [i ]).Return (nil ).Once ()
126+ }
127+ s .jobService .On ("KeepOnly" , s .ctx , s .namespaceSpec , adaptedJobs , mock2 .Anything ).Return (nil ).Once ()
128+ s .jobService .On ("Sync" , s .ctx , s .namespaceSpec , mock2 .Anything ).Return (nil ).Once ()
129+ stream .On ("Send" , mock2 .Anything ).Return (nil ).Once ()
130+
131+ runtimeServiceServer := s .newRuntimeServiceServer ()
132+ err := runtimeServiceServer .DeployJobSpecification (stream )
133+
134+ s .Assert ().NoError (err )
135+ stream .AssertExpectations (s .T ())
136+ s .adapter .AssertExpectations (s .T ())
137+ s .namespaceService .AssertExpectations (s .T ())
138+ s .jobService .AssertExpectations (s .T ())
139139 })
140+ }
141+
142+ func (s * RuntimeServiceServerTestSuite ) TestDeployJobSpecification_Fail () {
143+ }
140144
145+ // TODO: refactor to test suite
146+ func TestJobSpecificationOnServer (t * testing.T ) {
147+ log := log .NewNoop ()
148+ ctx := context .Background ()
141149 t .Run ("GetJobSpecification" , func (t * testing.T ) {
142150 t .Run ("should read a job spec" , func (t * testing.T ) {
143151 Version := "1.0.1"
@@ -287,7 +295,7 @@ func TestJobSpecificationOnServer(t *testing.T) {
287295 }
288296
289297 jobSvc := new (mock.JobService )
290- jobSvc .On ("Create" , ctx , jobSpec , namespaceSpec ).Return (nil )
298+ jobSvc .On ("Create" , ctx , namespaceSpec , jobSpec ).Return (nil )
291299 jobSvc .On ("Check" , ctx , namespaceSpec , []models.JobSpec {jobSpec }, mock2 .Anything ).Return (nil )
292300 jobSvc .On ("Sync" , mock2 .Anything , namespaceSpec , mock2 .Anything ).Return (nil )
293301 defer jobSvc .AssertExpectations (t )
0 commit comments