github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/api/datastore/redis/redis_test.go (about) 1 package redis 2 3 import ( 4 "bytes" 5 "fmt" 6 "log" 7 "net/url" 8 "os/exec" 9 "testing" 10 "time" 11 12 "github.com/garyburd/redigo/redis" 13 "github.com/iron-io/functions/api/datastore/internal/datastoretest" 14 ) 15 16 const tmpRedis = "redis://%v:6301/" 17 18 func prepareRedisTest(logf, fatalf func(string, ...interface{})) (func(), func()) { 19 fmt.Println("initializing redis for test") 20 tryRun(logf, "remove old redis container", exec.Command("docker", "rm", "-f", "iron-redis-test")) 21 mustRun(fatalf, "start redis container", exec.Command("docker", "run", "--name", "iron-redis-test", "-p", "6301:6379", "-d", "redis")) 22 timeout := time.After(20 * time.Second) 23 24 for { 25 c, err := redis.DialURL(fmt.Sprintf(tmpRedis, datastoretest.GetContainerHostIP())) 26 if err == nil { 27 _, err = c.Do("PING") 28 c.Close() 29 if err == nil { 30 break 31 } 32 } 33 fmt.Println("failed to PING redis:", err) 34 select { 35 case <-timeout: 36 log.Fatal("timed out waiting for redis") 37 case <-time.After(500 * time.Millisecond): 38 continue 39 } 40 } 41 fmt.Println("redis for test ready") 42 return func() {}, 43 func() { 44 tryRun(logf, "stop redis container", exec.Command("docker", "rm", "-f", "iron-redis-test")) 45 } 46 } 47 48 func TestDatastore(t *testing.T) { 49 _, close := prepareRedisTest(t.Logf, t.Fatalf) 50 defer close() 51 52 u, err := url.Parse(fmt.Sprintf(tmpRedis, datastoretest.GetContainerHostIP())) 53 if err != nil { 54 t.Fatal("failed to parse url: ", err) 55 } 56 ds, err := New(u) 57 if err != nil { 58 t.Fatal("failed to create redis datastore:", err) 59 } 60 61 datastoretest.Test(t, ds) 62 } 63 64 func tryRun(logf func(string, ...interface{}), desc string, cmd *exec.Cmd) { 65 var b bytes.Buffer 66 cmd.Stderr = &b 67 if err := cmd.Run(); err != nil { 68 logf("failed to %s: %s", desc, b.String()) 69 } 70 } 71 72 func mustRun(fatalf func(string, ...interface{}), desc string, cmd *exec.Cmd) { 73 var b bytes.Buffer 74 cmd.Stderr = &b 75 if err := cmd.Run(); err != nil { 76 fatalf("failed to %s: %s", desc, b.String()) 77 } 78 }