in codegen/post_gen_hooks.go [208:287]
func ServiceMockGenHook(h *PackageHelper, t *Template, configFile string) PostGenHook {
return func(instances map[string][]*ModuleInstance) error {
mockCount := len(instances["service"])
if mockCount == 0 {
return nil
}
fmt.Printf("Generating %d service mocks:\n", mockCount)
ec := make(chan error, mockCount)
var idx int32 = 1
var files sync.Map
var wg sync.WaitGroup
wg.Add(mockCount)
for _, instance := range instances["service"] {
go func(instance *ModuleInstance) {
defer wg.Done()
buildDir := h.CodeGenTargetPath()
genDir := filepath.Join(buildDir, instance.Directory, "mock-service")
mockInit, err := generateMockInitializer(instance, h, t)
if err != nil {
ec <- errors.Wrapf(
err,
"Error generating service mock_init.go for %s",
instance.InstanceName,
)
return
}
files.Store(filepath.Join(genDir, "mock_init.go"), mockInit)
mockService, err := generateServiceMock(instance, h, t, configFile)
if err != nil {
ec <- errors.Wrapf(
err,
"Error generating service mock_service.go for %s",
instance.InstanceName,
)
return
}
files.Store(filepath.Join(genDir, "mock_service.go"), mockService)
PrintGenLine(
"mock",
instance.ClassName,
instance.InstanceName,
path.Join(path.Base(buildDir), instance.Directory, "mock-service"),
int(atomic.LoadInt32(&idx)), mockCount,
)
atomic.AddInt32(&idx, 1)
}(instance)
}
wg.Wait()
select {
case err := <-ec:
close(ec)
errs := []string{err.Error()}
for e := range ec {
errs = append(errs, e.Error())
}
return errors.Errorf(
"encountered %d errors when generating mock services:\n%s",
len(errs),
strings.Join(errs, "\n"),
)
default:
}
var err error
files.Range(func(p, data interface{}) bool {
if err = WriteAndFormat(p.(string), data.([]byte)); err != nil {
return false
}
return true
})
return err
}
}