@@ -389,7 +389,11 @@ func TestGenerateAPI(t *testing.T) {
389389 if err := os .MkdirAll (templatesDir , 0755 ); err != nil {
390390 t .Fatal (err )
391391 }
392- err := generateAPI (
392+ apiCfg , err := serviceconfig .Find (googleapisDir , "google/cloud/secretmanager/v1" , config .LanguageJava )
393+ if err != nil {
394+ t .Fatal (err )
395+ }
396+ err = generateAPI (
393397 t .Context (),
394398 cfg ,
395399 & config.API {Path : "google/cloud/secretmanager/v1" },
@@ -400,6 +404,7 @@ func TestGenerateAPI(t *testing.T) {
400404 NamePretty : "Secret Manager" ,
401405 APIDescription : "Secret Manager API" ,
402406 },
407+ apiCfg ,
403408 )
404409 if err != nil {
405410 t .Fatal (err )
@@ -453,10 +458,14 @@ func TestGenerateAPI_NoTools(t *testing.T) {
453458 if err := os .MkdirAll (templatesDir , 0755 ); err != nil {
454459 t .Fatal (err )
455460 }
456- err := generateAPI (t .Context (), cfg , api , library , googleapisDir , outdir , & repoMetadata {
461+ apiCfg , err := serviceconfig .Find (googleapisDir , api .Path , config .LanguageJava )
462+ if err != nil {
463+ t .Fatal (err )
464+ }
465+ err = generateAPI (t .Context (), cfg , api , library , googleapisDir , outdir , & repoMetadata {
457466 NamePretty : "Secret Manager" ,
458467 APIDescription : "Secret Manager API" ,
459- })
468+ }, apiCfg )
460469 if err != nil {
461470 t .Fatal (err )
462471 }
@@ -525,12 +534,46 @@ func TestGenerateLibrary_Error(t *testing.T) {
525534 },
526535 wantErr : syscall .ENOTDIR ,
527536 },
537+ {
538+ name : "missing monorepo version" ,
539+ library : & config.Library {
540+ Name : "secretmanager" ,
541+ Output : t .TempDir (),
542+ APIs : []* config.API {
543+ {Path : "google/cloud/secretmanager/v1" },
544+ },
545+ },
546+ setup : func (t * testing.T , library * config.Library ) {
547+ // Ensure output artifacts exist for postProcessAPI to succeed.
548+ for _ , artifact := range []string {"google-cloud-secretmanager" , "proto-google-cloud-secretmanager-v1" , "grpc-google-cloud-secretmanager-v1" , "google-cloud-secretmanager-bom" } {
549+ if err := os .MkdirAll (filepath .Join (library .Output , artifact ), 0755 ); err != nil {
550+ t .Fatal (err )
551+ }
552+ }
553+ if err := os .WriteFile (filepath .Join (library .Output , "owlbot.py" ), []byte ("#!/usr/bin/env python3\n pass" ), 0755 ); err != nil {
554+ t .Fatal (err )
555+ }
556+ templatesDir := filepath .Join (filepath .Dir (library .Output ), owlbotTemplatesRelPath )
557+ if err := os .MkdirAll (templatesDir , 0755 ); err != nil {
558+ t .Fatal (err )
559+ }
560+ },
561+ wantErr : errMonorepoVersion ,
562+ },
528563 } {
529564 t .Run (test .name , func (t * testing.T ) {
565+ // Temporarily mock runProtoc to avoid external tool requirements.
566+ oldRunProtoc := runProtoc
567+ defer func () { runProtoc = oldRunProtoc }()
568+ runProtoc = func (ctx context.Context , args []string ) error { return nil }
569+
530570 if test .setup != nil {
531571 test .setup (t , test .library )
532572 }
533- cfg := & config.Config {Language : "java" }
573+ cfg := & config.Config {
574+ Language : config .LanguageJava ,
575+ Libraries : []* config.Library {test .library },
576+ }
534577 err := Generate (t .Context (), cfg , test .library , & sources.Sources {Googleapis : googleapisDir })
535578 if ! errors .Is (err , test .wantErr ) {
536579 t .Errorf ("generate() error = %v, wantErr %v" , err , test .wantErr )
@@ -539,6 +582,54 @@ func TestGenerateLibrary_Error(t *testing.T) {
539582 }
540583}
541584
585+ func TestGenerate_Logic (t * testing.T ) {
586+ // Tests the orchestration logic, temporarily mock runProtoc to avoid external tool requirements.
587+ oldRunProtoc := runProtoc
588+ defer func () { runProtoc = oldRunProtoc }()
589+ runProtoc = func (ctx context.Context , args []string ) error { return nil }
590+
591+ outdir := t .TempDir ()
592+ library := & config.Library {
593+ Name : "secretmanager" ,
594+ Version : "0.1.2" ,
595+ Output : outdir ,
596+ APIs : []* config.API {
597+ {Path : "google/cloud/secretmanager/v1" },
598+ },
599+ }
600+ cfg := & config.Config {
601+ Language : config .LanguageJava ,
602+ Repo : "googleapis/google-cloud-java" ,
603+ Libraries : []* config.Library {
604+ library ,
605+ {Name : rootLibrary , Version : "1.2.3" },
606+ },
607+ }
608+ // Setup mandatory files for postProcessAPI and generatePomsIfMissing
609+ for _ , artifact := range []string {"google-cloud-secretmanager" , "proto-google-cloud-secretmanager-v1" , "grpc-google-cloud-secretmanager-v1" , "google-cloud-secretmanager-bom" } {
610+ if err := os .MkdirAll (filepath .Join (outdir , artifact ), 0755 ); err != nil {
611+ t .Fatal (err )
612+ }
613+ }
614+ if err := os .WriteFile (filepath .Join (outdir , "owlbot.py" ), []byte ("#!/usr/bin/env python3\n pass" ), 0755 ); err != nil {
615+ t .Fatal (err )
616+ }
617+ templatesDir := filepath .Join (filepath .Dir (outdir ), owlbotTemplatesRelPath )
618+ if err := os .MkdirAll (templatesDir , 0755 ); err != nil {
619+ t .Fatal (err )
620+ }
621+
622+ err := Generate (t .Context (), cfg , library , & sources.Sources {Googleapis : googleapisDir })
623+ if err != nil {
624+ t .Fatal (err )
625+ }
626+
627+ // Verify that parent pom was generated in the library root.
628+ if _ , err := os .Stat (filepath .Join (outdir , "pom.xml" )); err != nil {
629+ t .Errorf ("expected parent pom.xml to exist: %v" , err )
630+ }
631+ }
632+
542633func TestFormat_Success (t * testing.T ) {
543634 testhelper .RequireCommand (t , "google-java-format" )
544635 for _ , test := range []struct {
0 commit comments