@@ -324,11 +324,22 @@ func TestNewGenerateRunner(t *testing.T) {
324324 name : "valid config" ,
325325 cfg : & config.Config {
326326 API : "some/api" ,
327- APISource : t .TempDir (),
327+ APISource : newTestGitRepo (t ).GetDir (),
328+ Repo : newTestGitRepo (t ).GetDir (),
329+ WorkRoot : t .TempDir (),
330+ Image : "gcr.io/test/test-image" ,
331+ },
332+ },
333+ {
334+ name : "invalid api source" ,
335+ cfg : & config.Config {
336+ API : "some/api" ,
337+ APISource : t .TempDir (), // Not a git repo
328338 Repo : newTestGitRepo (t ).GetDir (),
329339 WorkRoot : t .TempDir (),
330340 Image : "gcr.io/test/test-image" ,
331341 },
342+ wantErr : true ,
332343 },
333344 {
334345 name : "missing image" ,
@@ -345,13 +356,24 @@ func TestNewGenerateRunner(t *testing.T) {
345356 name : "valid config with github token" ,
346357 cfg : & config.Config {
347358 API : "some/api" ,
348- APISource : t . TempDir (),
359+ APISource : newTestGitRepo ( t ). GetDir (),
349360 Repo : newTestGitRepo (t ).GetDir (),
350361 WorkRoot : t .TempDir (),
351362 Image : "gcr.io/test/test-image" ,
352363 GitHubToken : "gh-token" ,
353364 },
354365 },
366+ {
367+ name : "clone googleapis fails" ,
368+ cfg : & config.Config {
369+ API : "some/api" ,
370+ APISource : "" , // This will trigger the clone of googleapis
371+ Repo : newTestGitRepo (t ).GetDir (),
372+ WorkRoot : t .TempDir (),
373+ Image : "gcr.io/test/test-image" ,
374+ },
375+ wantErr : true ,
376+ },
355377 } {
356378 t .Run (test .name , func (t * testing.T ) {
357379 t .Parallel ()
@@ -362,6 +384,7 @@ func TestNewGenerateRunner(t *testing.T) {
362384 if err := os .MkdirAll (filepath .Dir (stateFile ), 0755 ); err != nil {
363385 t .Fatalf ("os.MkdirAll() = %v" , err )
364386 }
387+
365388 state := & config.LibrarianState {
366389 Image : "some/image:v1.2.3" ,
367390 Libraries : []* config.LibraryState {
@@ -376,6 +399,7 @@ func TestNewGenerateRunner(t *testing.T) {
376399 if err != nil {
377400 t .Fatalf ("yaml.Marshal() = %v" , err )
378401 }
402+
379403 if err := os .WriteFile (stateFile , b , 0644 ); err != nil {
380404 t .Fatalf ("os.WriteFile(%q, ...) = %v" , stateFile , err )
381405 }
@@ -387,6 +411,35 @@ func TestNewGenerateRunner(t *testing.T) {
387411 runGit (t , test .cfg .Repo , "commit" , "-m" , "add config" )
388412 }
389413
414+ if test .cfg .APISource == "" && test .cfg .WorkRoot != "" {
415+ if test .name == "clone googleapis fails" {
416+ // The function will try to clone googleapis into the workroot.
417+ // To make it fail, create a non-empty, non-git directory.
418+ googleapisDir := filepath .Join (test .cfg .WorkRoot , "googleapis" )
419+ if err := os .MkdirAll (googleapisDir , 0755 ); err != nil {
420+ t .Fatalf ("os.MkdirAll() = %v" , err )
421+ }
422+ if err := os .WriteFile (filepath .Join (googleapisDir , "some-file" ), []byte ("foo" ), 0644 ); err != nil {
423+ t .Fatalf ("os.WriteFile() = %v" , err )
424+ }
425+ } else {
426+ // The function will try to clone googleapis into the workroot.
427+ // To prevent a real clone, we can pre-create a fake googleapis repo.
428+ googleapisDir := filepath .Join (test .cfg .WorkRoot , "googleapis" )
429+ if err := os .MkdirAll (googleapisDir , 0755 ); err != nil {
430+ t .Fatalf ("os.MkdirAll() = %v" , err )
431+ }
432+ runGit (t , googleapisDir , "init" )
433+ runGit (
t ,
googleapisDir ,
"config" ,
"user.email" ,
"[email protected] " )
434+ runGit (t , googleapisDir , "config" , "user.name" , "Test User" )
435+ if err := os .WriteFile (filepath .Join (googleapisDir , "README.md" ), []byte ("test" ), 0644 ); err != nil {
436+ t .Fatalf ("os.WriteFile: %v" , err )
437+ }
438+ runGit (t , googleapisDir , "add" , "README.md" )
439+ runGit (t , googleapisDir , "commit" , "-m" , "initial commit" )
440+ }
441+ }
442+
390443 _ , err := newGenerateRunner (test .cfg )
391444 if (err != nil ) != test .wantErr {
392445 t .Errorf ("newGenerateRunner() error = %v, wantErr %v" , err , test .wantErr )
0 commit comments