72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
// +build integration
|
|
|
|
package mongodb
|
|
|
|
import (
|
|
"log"
|
|
"math/rand"
|
|
"net/url"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"gopkg.in/mgo.v2"
|
|
)
|
|
|
|
var connect_url string
|
|
var server *Server
|
|
|
|
func init() {
|
|
connect_url = os.Getenv("MONGODB_URL")
|
|
if connect_url == "" {
|
|
connect_url = "127.0.0.1:27017"
|
|
server = &Server{Url: &url.URL{Host: connect_url}}
|
|
} else {
|
|
full_url, err := url.Parse(connect_url)
|
|
if err != nil {
|
|
log.Fatalf("Unable to parse URL (%s), %s\n", full_url, err.Error())
|
|
}
|
|
server = &Server{Url: full_url}
|
|
}
|
|
}
|
|
|
|
func testSetup(m *testing.M) {
|
|
var err error
|
|
var dialAddrs []string
|
|
if server.Url.User != nil {
|
|
dialAddrs = []string{server.Url.String()}
|
|
} else {
|
|
dialAddrs = []string{server.Url.Host}
|
|
}
|
|
dialInfo, err := mgo.ParseURL(dialAddrs[0])
|
|
if err != nil {
|
|
log.Fatalf("Unable to parse URL (%s), %s\n", dialAddrs[0], err.Error())
|
|
}
|
|
dialInfo.Direct = true
|
|
dialInfo.Timeout = time.Duration(8) * time.Second
|
|
sess, err := mgo.DialWithInfo(dialInfo)
|
|
if err != nil {
|
|
log.Fatalf("Unable to connect to MongoDB, %s\n", err.Error())
|
|
}
|
|
server.Session = sess
|
|
server.Session, _ = mgo.Dial(server.Url.Host)
|
|
if err != nil {
|
|
log.Fatalln(err.Error())
|
|
}
|
|
}
|
|
|
|
func testTeardown(m *testing.M) {
|
|
server.Session.Close()
|
|
}
|
|
|
|
func TestMain(m *testing.M) {
|
|
// seed randomness for use with tests
|
|
rand.Seed(time.Now().UTC().UnixNano())
|
|
|
|
testSetup(m)
|
|
res := m.Run()
|
|
testTeardown(m)
|
|
|
|
os.Exit(res)
|
|
}
|