diff --git a/workers/server/worker.go b/workers/server/worker.go index ebe92055..3ca180a5 100644 --- a/workers/server/worker.go +++ b/workers/server/worker.go @@ -102,7 +102,7 @@ func (w *WorkServer) GetWork(workInst *pb.WorkerInstance, serv pb.Worker_GetWork return nil } -// GetGitRepo checks out the code for a git repository. +// GetGitRepo retrieves repository information associated with a pipline. func (w *WorkServer) GetGitRepo(ctx context.Context, in *pb.PipelineID) (*pb.GitRepo, error) { repo := &pb.GitRepo{} @@ -124,6 +124,10 @@ func (w *WorkServer) GetGitRepo(ctx context.Context, in *pb.PipelineID) (*pb.Git return repo, err } + if repoInfo == nil { + return nil, fmt.Errorf("pipeline for id %d not found\n", int(in.Id)) + } + pk := pb.PrivateKey{} pk.Key = repoInfo.Repo.PrivateKey.Key pk.Username = repoInfo.Repo.PrivateKey.Username diff --git a/workers/server/worker_test.go b/workers/server/worker_test.go index ffc40613..33013f67 100644 --- a/workers/server/worker_test.go +++ b/workers/server/worker_test.go @@ -4,6 +4,12 @@ import ( "bytes" "context" "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "testing" + "github.com/gaia-pipeline/gaia" "github.com/gaia-pipeline/gaia/services" "github.com/gaia-pipeline/gaia/store" @@ -14,11 +20,6 @@ import ( "github.com/hashicorp/go-hclog" "google.golang.org/grpc" "google.golang.org/grpc/metadata" - "io" - "io/ioutil" - "os" - "path/filepath" - "testing" ) type mockMemDBService struct { @@ -42,12 +43,16 @@ func (mm *mockMemDBService) DeleteWorker(id string, persist bool) error { type mockStorageService struct { store.GaiaStore + mockPipeline *gaia.Pipeline } func (s *mockStorageService) PipelineGetRunByPipelineIDAndID(pipelineid int, runid int) (*gaia.PipelineRun, error) { return generateTestData(), nil } func (s *mockStorageService) PipelinePutRun(r *gaia.PipelineRun) error { return nil } +func (s *mockStorageService) PipelineGet(id int) (pipeline *gaia.Pipeline, err error) { + return s.mockPipeline, nil +} type mockGetWorkServ struct { grpc.ServerStream @@ -317,3 +322,59 @@ func TestDeregister(t *testing.T) { t.Fatal(err) } } + +func TestGetGitRepository(t *testing.T) { + gaia.Cfg = &gaia.Config{} + gaia.Cfg.Logger = hclog.New(&hclog.LoggerOptions{ + Level: hclog.Trace, + Name: "Gaia", + }) + ms := mockStorageService{mockPipeline: &gaia.Pipeline{ + ID: 1, + Name: "testPipeline", + Repo: &gaia.GitRepo{ + URL: "https://github.com/gaia-pipeline/go-example", + }, + }} + services.MockMemDBService(&mockMemDBService{}) + services.MockStorageService(&ms) + + // Mock gRPC server + mw := mockGetWorkServ{} + + // Run deregister + ws := WorkServer{} + repo, err := ws.GetGitRepo(mw.Context(), &pb.PipelineID{Id: 1}) + if err != nil { + t.Fatal(err) + } + expectedRepoURL := "https://github.com/gaia-pipeline/go-example" + if repo.Url != expectedRepoURL { + t.Fatalf("expected git repo url: %s, got: %s\n", expectedRepoURL, repo.Url) + } +} + +func TestGetGitRepositoryRepoNotFound(t *testing.T) { + gaia.Cfg = &gaia.Config{} + gaia.Cfg.Logger = hclog.New(&hclog.LoggerOptions{ + Level: hclog.Trace, + Name: "Gaia", + }) + services.MockMemDBService(&mockMemDBService{}) + services.MockStorageService(&mockStorageService{}) + + // Mock gRPC server + mw := mockGetWorkServ{} + + // Run deregister + ws := WorkServer{} + _, err := ws.GetGitRepo(mw.Context(), &pb.PipelineID{Id: 9999}) + if err == nil { + t.Fatal("should have gotten an error because pipeline doesn't exist") + } + + expectedError := fmt.Sprintf("pipeline for id %d not found\n", 9999) + if err.Error() != expectedError { + t.Fatalf("expected error message: %s, got: %s\n", expectedError, err.Error()) + } +}