func getPrimaryPort(session *mgo.Session) (string, error) { result := struct { Members []struct { Name string `bson:"name"` StateStr string `bson:"stateStr"` } `bson:"members"` }{} res := &struct { Msg string }{} session.Run("ismaster", res) isMongosTestServer = (res.Msg == "isdbgrid") if isMongosTestServer { return "", nil } err := session.DB("admin").Run("replSetGetStatus", &result) if err != nil { if err.Error() == "not running with --replSet" { return "", nil } return "", err } for _, member := range result.Members { if member.StateStr == "PRIMARY" { return strings.Split(member.Name, ":")[1], nil } } return "", fmt.Errorf("replset status has no primary") }
func getTestDBPort(session *mgo.Session) (string, error) { if port := os.Getenv("DB_PORT"); port != "" { return port, nil } result := struct { Members []struct { Name string `bson:"name"` StateStr string `bson:"stateStr"` } `bson:"members"` }{} err := session.DB("admin").Run("replSetGetStatus", &result) if err != nil && err.Error() != "not running with --replSet" { return "", err } if err != nil && err.Error() == "not running with --replSet" { return fmt.Sprintf("%d", defaultTestPort), nil } for _, member := range result.Members { if member.StateStr == "PRIMARY" { return strings.Split(member.Name, ":")[1], nil } } return "", fmt.Errorf("unable to determine database port") }