"go test" возвращает ошибку "gocql: от cassandra в течение периода ожидания ответа не получено".
Поэтому я хочу протестировать API, который взаимодействует с Cassandra на моей локальной машине. В моем func TestMain(m *testing.M)
функция, я хочу очистить таблицы перед запуском тестов. TestMain
функция выглядит так...
func TestMain(m *testing.M) {
keyspace = "staging"
cassandra.SetKeyspace(keyspace)
client = http.DefaultClient
// Ensure all tables are empty before tests run
err := ClearAllTables()
if err != nil {
logrus.Errorf("Failed to clear all tables: %v.", err)
os.Exit(1)
}
// Run tests
statusCode := m.Run()
os.Exit(statusCode)
}
ClearAllTables
функция выглядит так...
func ClearAllTables() (err error) {
// Create a DB session
session := cassandra.CreateSession()
defer session.Close()
// Get names of all existing tables
tableNameList := []string{"cliques", "users"}
// Remove all rows from each table
var count int
for _, tableName := range tableNameList {
if err := session.Query(`TRUNCATE TABLE ` + tableName).Exec(); err != nil {
return err
}
}
return nil
}
По какой-то причине, когда я пытаюсь TRUNCATE таблицы, Кассандра останавливается, и я получаю ошибку...
level=error msg="Failed to clear all tables: gocql: no response received from cassandra within timeout period."
Кажется, это происходит только тогда, когда я тестирую программу. Я написал фрагмент кода в основной функции, которая отлично работает.
func main () {
session := cassandra.CreateSession()
defer session.Close()
if err := session.Query(`TRUNCATE TABLE cliques`).Exec(); err != nil {
return
}
fmt.Println("Table truncated") //works
}
Я также написал фрагмент кода, который возвращает несколько строк из базы данных, и это также отлично работает в основной функции.
Вот как я создаю свою сессию Кассандры...
// CreateSession connect to a cassandra instance
func CreateSession() *gocql.Session {
// Connect to the cluster
cluster := gocql.NewCluster("127.0.0.1")
cluster.Keyspace = "staging"
cluster.ProtoVersion = 4
cluster.CQLVersion = "3.0.0"
cluster.Consistency = gocql.One
session, err := cluster.CreateSession()
if err != nil {
logrus.Errorf("Failed to connect to Cassandra: %v.", err)
}
return session
}
Я что-то упустил, с чего бы Кассандре нормально работать go run main.go
но не работает с go test
?