Implementation enhances JobsController interface and implementation.
The mockup of JobsController is regenerated using:
mockgen -source=controller/jobscontroller.go \
-destination=controller/mock/jobscontroller.go \
-package mock \
-imports ".=git.tizen.org/tools/weles"
Tests for both JobsControllerImpl and Controller are updated.
Change-Id: Ie30234ac754d19616ce2811e3f30a6834d28e296
Signed-off-by: Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
// and contains information about requested Jobs only.
// It is a part of JobManager implementation.
func (c *Controller) ListJobs(filter []JobID) ([]JobInfo, error) {
- return nil, ErrNotImplemented
+ return c.jobs.List(filter)
}
// loop implements main loop of the Controller reacting to different events
})
})
Describe("ListJobs", func() {
- It("should not be implemented yet", func() {
+ It("should call JobsController method", func() {
filter := []JobID{2, 3, 5}
- info, err := h.ListJobs(filter)
+ list := []JobInfo{
+ JobInfo{
+ JobID: JobID(67),
+ Name: "test name",
+ },
+ }
+ jc.EXPECT().List(filter).Return(list, err)
- Expect(err).To(Equal(ErrNotImplemented))
- Expect(info).To(BeZero())
+ ret, retErr := h.ListJobs(filter)
+
+ Expect(retErr).To(Equal(err))
+ Expect(ret).To(Equal(list))
})
})
Describe("Actions", func() {
SetDryad(JobID, Dryad) error
// GetConfig returns Dryad acquired for the Job.
GetDryad(JobID) (Dryad, error)
+ // List returns information about Jobs. If argument is a nil/empty slice
+ // information about all Jobs is returned. Otherwise result is filtered
+ // and contains information about requested Jobs only.
+ List([]JobID) ([]JobInfo, error)
}
return job.dryad, nil
}
+
+// List returns information about Jobs. If argument is a nil/empty slice
+// information about all Jobs is returned. Otherwise result is filtered
+// and contains information about requested Jobs only.
+func (js *JobsControllerImpl) List(filter []JobID) ([]JobInfo, error) {
+ js.mutex.RLock()
+ defer js.mutex.RUnlock()
+ var ret []JobInfo
+ if len(filter) == 0 {
+ // Get all Jobs.
+ for _, job := range js.jobs {
+ ret = append(ret, job.JobInfo)
+ }
+ } else {
+ // Get filtered Jobs.
+ for _, j := range filter {
+ job, ok := js.jobs[j]
+ if ok {
+ ret = append(ret, job.JobInfo)
+ }
+ }
+ }
+ return ret, nil
+}
Expect(dryad).To(BeZero())
})
})
+
+ Describe("List", func() {
+ var jobids []JobID
+ const elems int = 5
+ expectIDs := func(result []JobInfo, expected []JobID) {
+ Expect(len(result)).To(Equal(len(expected)))
+ for _, j := range expected {
+ Expect(result).To(ContainElement(WithTransform(func(info JobInfo) JobID {
+ return info.JobID
+ }, Equal(j))))
+ }
+ }
+ BeforeEach(func() {
+ jobids = []JobID{}
+ for i := 1; i <= elems; i++ {
+ j, err := jc.NewJob(yaml)
+ Expect(err).NotTo(HaveOccurred())
+ jobids = append(jobids, j)
+ }
+ })
+ It("should return all Jobs if filter is nil", func() {
+ list, err := jc.List(nil)
+ Expect(err).NotTo(HaveOccurred())
+ expectIDs(list, jobids)
+ })
+ It("should return all Jobs if filter is empty", func() {
+ list, err := jc.List([]JobID{})
+ Expect(err).NotTo(HaveOccurred())
+ expectIDs(list, jobids)
+ })
+ It("should return only filtered Jobs", func() {
+ filter := []JobID{jobids[1], jobids[2]}
+ list, err := jc.List(filter)
+ Expect(err).NotTo(HaveOccurred())
+ expectIDs(list, filter)
+ })
+ It("should ignore not existing Jobs listed in filter", func() {
+ filter := []JobID{jobids[1], jobids[2]}
+ list, err := jc.List(append(filter, JobID(0x0BCA)))
+ Expect(err).NotTo(HaveOccurred())
+ expectIDs(list, filter)
+ })
+ })
})
})
func (mr *MockJobsControllerMockRecorder) GetDryad(arg0 interface{}) *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDryad", reflect.TypeOf((*MockJobsController)(nil).GetDryad), arg0)
}
+
+// List mocks base method
+func (m *MockJobsController) List(arg0 []JobID) ([]JobInfo, error) {
+ ret := m.ctrl.Call(m, "List", arg0)
+ ret0, _ := ret[0].([]JobInfo)
+ ret1, _ := ret[1].(error)
+ return ret0, ret1
+}
+
+// List indicates an expected call of List
+func (mr *MockJobsControllerMockRecorder) List(arg0 interface{}) *gomock.Call {
+ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockJobsController)(nil).List), arg0)
+}