func (s *EagerBackendTestSuite) SetupSuite() { // prepare common test data s.backend = backends.NewEagerBackend() // 2 non-group state s.st = []*signatures.TaskSignature{ {UUID: "1"}, {UUID: "2"}, {UUID: "3"}, {UUID: "4"}, {UUID: "5"}, {UUID: "6"}, } for _, t := range s.st { s.backend.SetStatePending(t) } // groups s.groups = []struct { id string tasks []string }{ {"group1", []string{"1-3", "1-4"}}, {"group2", []string{"2-1", "2-2", "2-3"}}, {"group3", []string(nil)}, {"group4", []string{"4-1", "4-2", "4-3", "4-4"}}, {"group5", []string{"5-1", "5-2"}}, } for _, g := range s.groups { for _, t := range g.tasks { sig := &signatures.TaskSignature{ UUID: t, GroupUUID: g.id, GroupTaskCount: len(g.tasks), } s.st = append(s.st, sig) // default state is pending s.backend.SetStatePending(sig) } s.Nil(s.backend.InitGroup(g.id, g.tasks)) } // prepare for TestInitGroup s.Nil(s.backend.PurgeGroupMeta(s.groups[4].id)) }
// BackendFactory creates a new object with backends.Backend interface // Currently supported backends are AMQP and Memcache func BackendFactory(cnf *config.Config) (backends.Backend, error) { if strings.HasPrefix(cnf.ResultBackend, "amqp://") { return backends.NewAMQPBackend(cnf), nil } if strings.HasPrefix(cnf.ResultBackend, "memcache://") { parts := strings.Split(cnf.ResultBackend, "memcache://") if len(parts) != 2 { return nil, fmt.Errorf( "Memcache result backend connection string should be in format memcache://server1:port,server2:port, instead got %s", cnf.ResultBackend, ) } servers := strings.Split(parts[1], ",") return backends.NewMemcacheBackend(cnf, servers), nil } if strings.HasPrefix(cnf.ResultBackend, "redis://") { redisHost, redisPassword, redisDB, err := ParseRedisURL(cnf.ResultBackend) if err != nil { return nil, err } return backends.NewRedisBackend(cnf, redisHost, redisPassword, "", redisDB), nil } if strings.HasPrefix(cnf.ResultBackend, "redis+socket://") { redisSocket, redisPassword, redisDB, err := ParseRedisSocketURL(cnf.ResultBackend) if err != nil { return nil, err } return backends.NewRedisBackend(cnf, "", redisPassword, redisSocket, redisDB), nil } if strings.HasPrefix(cnf.ResultBackend, "mongodb://") { return backends.NewMongodbBackend(cnf) } if strings.HasPrefix(cnf.ResultBackend, "eager") { return backends.NewEagerBackend(), nil } return nil, fmt.Errorf("Factory failed with result backend: %v", cnf.ResultBackend) }