e2etest/stress_generators/generator_reg.go (49 lines of code) (raw):

package main import ( "fmt" "github.com/Azure/azure-storage-azcopy/v10/common" "github.com/Azure/azure-storage-azcopy/v10/e2etest" "github.com/spf13/cobra" "github.com/spf13/pflag" ) type Generator interface { Name() string Generate(manager e2etest.ServiceResourceManager) error RegisterFlags(flags *pflag.FlagSet) PreferredService() common.Location } var GeneratorRegistry = make(map[string]Generator) func RegisterGenerator(g Generator) { _, ok := GeneratorRegistry[g.Name()] if ok { panic("Generator " + g.Name() + " re-registered") } GeneratorRegistry[g.Name()] = g cmd := &cobra.Command{ Use: fmt.Sprintf("%s <service-uri>", g.Name()), RunE: func(cmd *cobra.Command, args []string) error { return RunGenerator(g.Name(), args[0]) }, Args: RequireValidTarget, } g.RegisterFlags(cmd.PersistentFlags()) RootCmd.AddCommand(cmd) } func RunGenerator(name, target string) error { acct, err := GetAccountResourceManager(target) if err != nil { return fmt.Errorf("failed to get account resource manager: %w", err) } gen, ok := GeneratorRegistry[name] if !ok { return fmt.Errorf("generator %s does not exist", name) } a := &DummyAsserter{} svc := acct.GetService(a, gen.PreferredService()) fmt.Printf("Generating scenario %s... This may take a long time, please be patient.\n", name) err = gen.Generate(svc) if err != nil { return fmt.Errorf("failed generating scenario %s: %w", name, err) } return nil }