return
}
+ config, err := h.jobs.GetConfig(j)
+ if err != nil {
+ h.SendFail(j, fmt.Sprintf("Internal Weles error while getting Job config : %s", err.Error()))
+ return
+ }
+
h.add(j)
- err = h.djm.Create(j, d, h.listener)
+ err = h.djm.Create(j, d, config, h.listener)
if err != nil {
h.remove(j)
h.SendFail(j, fmt.Sprintf("Cannot delegate Job to Dryad : %s", err.Error()))
j := weles.JobID(0xCAFE)
dryad := weles.Dryad{Addr: &net.IPNet{IP: net.IPv4(1, 2, 3, 4), Mask: net.IPv4Mask(5, 6, 7, 8)}}
err := errors.New("test error")
+ conf := weles.Config{JobName: "test123"}
expectRegistered := func(offset int) {
h.(*DryaderImpl).mutex.Lock()
Describe("StartJob", func() {
It("should register job successfully", func() {
jc.EXPECT().GetDryad(j).Return(dryad, nil)
- djm.EXPECT().Create(j, dryad, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener))
+ jc.EXPECT().GetConfig(j).Return(conf, nil)
+ djm.EXPECT().Create(j, dryad, conf, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener))
h.StartJob(j)
expectRegistered(1)
})
It("should fail if DryadJobManager.Create fails", func() {
jc.EXPECT().GetDryad(j).Return(dryad, nil)
- djm.EXPECT().Create(j, dryad, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener)).Return(err)
+ jc.EXPECT().GetConfig(j).Return(conf, nil)
+ djm.EXPECT().Create(j, dryad, conf, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener)).Return(err)
h.StartJob(j)
}
BeforeEach(func() {
jc.EXPECT().GetDryad(j).Return(dryad, nil)
- djm.EXPECT().Create(j, dryad, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener))
+ jc.EXPECT().GetConfig(j).Return(conf, nil)
+ djm.EXPECT().Create(j, dryad, conf, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener))
h.StartJob(j)
package weles
+//go:generate mockgen -package mock -destination=mock/dryadjobmanager.go git.tizen.org/tools/weles DryadJobManager
+
import (
"crypto/rsa"
"net"
// DryadJobManager organizes running Jobs on allocated Dryad.
type DryadJobManager interface {
// Create starts execution of Job definition on allocated Dryad.
+ // Job's config is passed in order to avoid need to fetch it from Job Manager.
+ //
+ // JobID is used only to reference currently executing Jobs.
//
// Slow read from a channel may miss some events.
- Create(JobID, Dryad, chan<- DryadJobStatusChange) error
+ Create(JobID, Dryad, Config, chan<- DryadJobStatusChange) error
// Cancel stops DryadJob associated with Job.
//
// newDryadJob creates an instance of dryadJob and starts a goroutine
// executing phases of given job implemented by provider of DryadJobRunner interface.
-func newDryadJob(job JobID, rusalka Dryad, changes chan<- DryadJobStatusChange) *dryadJob {
+func newDryadJob(job JobID, rusalka Dryad, conf Config, changes chan<- DryadJobStatusChange) *dryadJob {
// FIXME: It should use the proper path to the artifactory.
session := dryad.NewSessionProvider(rusalka, "")
device := dryad.NewDeviceCommunicationProvider(session)
ctx, cancel := context.WithCancel(context.Background())
- runner := newDryadJobRunner(ctx, session, device)
+ runner := newDryadJobRunner(ctx, session, device, conf)
dJob := newDryadJobWithCancel(job, changes, runner, cancel)
}
// Create is part of DryadJobManager interface.
-func (d *DryadJobs) Create(job JobID, rusalka Dryad, changes chan<- DryadJobStatusChange) error {
+func (d *DryadJobs) Create(job JobID, rusalka Dryad, conf Config, changes chan<- DryadJobStatusChange) error {
_, ok := d.jobs[job]
if ok {
return ErrDuplicated
d.jobsMutex.Lock()
defer d.jobsMutex.Unlock()
// FIXME(amistewicz): dryadJobs should not be stored indefinitely.
- d.jobs[job] = newDryadJob(job, rusalka, changes)
+ d.jobs[job] = newDryadJob(job, rusalka, conf, changes)
return nil
}
})
create := func() {
- err := djm.Create(jobID, Dryad{}, nil)
+ err := djm.Create(jobID, Dryad{}, Config{}, nil)
Expect(err).ToNot(HaveOccurred())
}
It("should fail to duplicate jobs", func() {
create()
- err := djm.Create(jobID, Dryad{}, nil)
+ err := djm.Create(jobID, Dryad{}, Config{}, nil)
Expect(err).To(Equal(ErrDuplicated))
})
import (
"context"
+ "git.tizen.org/tools/weles"
"git.tizen.org/tools/weles/manager/dryad"
)
ctx context.Context
rusalka dryad.SessionProvider
device dryad.DeviceCommunicationProvider
+ conf weles.Config
}
// newDryadJobRunner prepares a new instance of dryadJobRunner
// and returns DryadJobRunner interface to it.
-func newDryadJobRunner(ctx context.Context, rusalka dryad.SessionProvider, device dryad.DeviceCommunicationProvider) DryadJobRunner {
+func newDryadJobRunner(ctx context.Context, rusalka dryad.SessionProvider,
+ device dryad.DeviceCommunicationProvider, conf weles.Config) DryadJobRunner {
return &dryadJobRunner{
ctx: ctx,
rusalka: rusalka,
device: device,
+ conf: conf,
}
}
"context"
"errors"
+ "git.tizen.org/tools/weles"
+
"github.com/golang/mock/gomock"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
ctrl = gomock.NewController(GinkgoT())
mockSession = NewMockSessionProvider(ctrl)
mockDevice = NewMockDeviceCommunicationProvider(ctrl)
- djr = newDryadJobRunner(context.Background(), mockSession, mockDevice)
+ djr = newDryadJobRunner(context.Background(), mockSession, mockDevice, weles.Config{})
})
AfterEach(func() {
}
// Create mocks base method
-func (m *MockDryadJobManager) Create(arg0 weles.JobID, arg1 weles.Dryad, arg2 chan<- weles.DryadJobStatusChange) error {
- ret := m.ctrl.Call(m, "Create", arg0, arg1, arg2)
+func (m *MockDryadJobManager) Create(arg0 weles.JobID, arg1 weles.Dryad, arg2 weles.Config, arg3 chan<- weles.DryadJobStatusChange) error {
+ ret := m.ctrl.Call(m, "Create", arg0, arg1, arg2, arg3)
ret0, _ := ret[0].(error)
return ret0
}
// Create indicates an expected call of Create
-func (mr *MockDryadJobManagerMockRecorder) Create(arg0, arg1, arg2 interface{}) *gomock.Call {
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockDryadJobManager)(nil).Create), arg0, arg1, arg2)
+func (mr *MockDryadJobManagerMockRecorder) Create(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
+ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockDryadJobManager)(nil).Create), arg0, arg1, arg2, arg3)
}
// List mocks base method