github.com/matcornic/migrate@v3.3.2-0.20180717234201-feea45c20506+incompatible/database/cassandra/cassandra_test.go (about)

     1  package cassandra
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"testing"
     7  
     8  	"github.com/gocql/gocql"
     9  
    10  	dt "github.com/golang-migrate/migrate/database/testing"
    11  	mt "github.com/golang-migrate/migrate/testing"
    12  )
    13  
    14  var versions = []mt.Version{
    15  	{Image: "cassandra:3.0.10"},
    16  	{Image: "cassandra:3.0"},
    17  }
    18  
    19  func isReady(i mt.Instance) bool {
    20  	// Cassandra exposes 5 ports (7000, 7001, 7199, 9042 & 9160)
    21  	// We only need the port bound to 9042, but we can only access to the first one
    22  	// through 'i.Port()' (which calls DockerContainer.firstPortMapping())
    23  	// So we need to get port mapping to retrieve correct port number bound to 9042
    24  	portMap := i.NetworkSettings().Ports
    25  	port, _ := strconv.Atoi(portMap["9042/tcp"][0].HostPort)
    26  
    27  	cluster := gocql.NewCluster(i.Host())
    28  	cluster.Port = port
    29  	cluster.Consistency = gocql.All
    30  	p, err := cluster.CreateSession()
    31  	if err != nil {
    32  		return false
    33  	}
    34  	defer p.Close()
    35  	// Create keyspace for tests
    36  	if err = p.Query("CREATE KEYSPACE testks WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor':1}").Exec(); err != nil {
    37  		return false
    38  	}
    39  	return true
    40  }
    41  
    42  func Test(t *testing.T) {
    43  	mt.ParallelTest(t, versions, isReady,
    44  		func(t *testing.T, i mt.Instance) {
    45  			p := &Cassandra{}
    46  			portMap := i.NetworkSettings().Ports
    47  			port, _ := strconv.Atoi(portMap["9042/tcp"][0].HostPort)
    48  			addr := fmt.Sprintf("cassandra://%v:%v/testks", i.Host(), port)
    49  			d, err := p.Open(addr)
    50  			if err != nil {
    51  				t.Fatalf("%v", err)
    52  			}
    53  			defer d.Close()
    54  			dt.Test(t, d, []byte("SELECT table_name from system_schema.tables"))
    55  		})
    56  }