github.com/misfo/deis@v1.0.1-0.20141111224634-e0eee0392b8a/tests/mock/mock.go (about) 1 // Package mock provides mock objects and setup for Deis tests. 2 3 package mock 4 5 import ( 6 "fmt" 7 "testing" 8 "time" 9 10 "github.com/deis/deis/tests/dockercli" 11 "github.com/deis/deis/tests/etcdutils" 12 "github.com/deis/deis/tests/utils" 13 14 "github.com/docker/docker/api/client" 15 ) 16 17 // RunMockDatabase starts a mock postgresql database for testing. 18 func RunMockDatabase(t *testing.T, tag string, etcdPort string, dbPort string) { 19 var err error 20 cli, stdout, stdoutPipe := dockercli.NewClient() 21 done := make(chan bool, 1) 22 dbImage := "deis/test-postgresql:latest" 23 ipaddr := utils.HostAddress() 24 done <- true 25 go func() { 26 <-done 27 err = dockercli.RunContainer(cli, 28 "--name", "deis-test-database-"+tag, 29 "--rm", 30 "-p", dbPort+":5432", 31 "-e", "EXTERNAL_PORT="+dbPort, 32 "-e", "HOST="+ipaddr, 33 "-e", "USER=deis", 34 "-e", "DB=deis", 35 "-e", "PASS=deis", 36 dbImage) 37 }() 38 time.Sleep(1000 * time.Millisecond) 39 dockercli.PrintToStdout(t, stdout, stdoutPipe, "Initialization complete.") 40 setkeys := []string{ 41 "/deis/database/user", 42 "/deis/database/password", 43 "/deis/database/name", 44 } 45 setdir := []string{} 46 dbhandler := etcdutils.InitEtcd(setdir, setkeys, etcdPort) 47 etcdutils.PublishEtcd(t, dbhandler) 48 etcdutils.SetEtcd(t, 49 []string{"/deis/database/host", "/deis/database/port", "/deis/database/engine"}, 50 []string{ipaddr, dbPort, "postgresql_psycopg2"}, dbhandler.C) 51 if err != nil { 52 t.Fatal(err) 53 } 54 } 55 56 // RunMockCeph runs a set of containers used to mock a Ceph storage cluster 57 func RunMockCeph(t *testing.T, name string, cli *client.DockerCli, etcdPort string) { 58 59 etcdutils.SetSingle(t, "/deis/store/hosts/"+utils.HostAddress(), utils.HostAddress(), etcdPort) 60 61 // since we're only running one OSD, our default of 128 placement groups is too large 62 etcdutils.SetSingle(t, "/deis/store/pgNum", "64", etcdPort) 63 64 monitorName := name + "-monitor" 65 RunMockCephMonitor(t, monitorName, etcdPort) 66 67 daemonName := name + "-daemon" 68 RunMockCephDaemon(t, daemonName, etcdPort) 69 70 metadataName := name + "-metadata" 71 RunMockCephMetadata(t, metadataName, etcdPort) 72 73 gatewayName := name + "-gateway" 74 RunMockCephGateway(t, gatewayName, utils.RandomPort(), etcdPort) 75 } 76 77 // RunMockCephMonitor runs a Ceph Monitor agent 78 func RunMockCephMonitor(t *testing.T, name string, etcdPort string) { 79 var err error 80 cli, stdout, stdoutPipe := dockercli.NewClient() 81 cephImage := "deis/store-monitor:" + utils.BuildTag() 82 ipaddr := utils.HostAddress() 83 fmt.Printf("--- Running deis/mock-ceph-monitor at %s\n", ipaddr) 84 done2 := make(chan bool, 1) 85 go func() { 86 done2 <- true 87 _ = cli.CmdRm("-f", name) 88 err = dockercli.RunContainer(cli, 89 "--name", name, 90 "--rm", 91 "-e", "HOST="+ipaddr, 92 "-e", "ETCD_PORT="+etcdPort, 93 "-e", "NUM_STORES=1", 94 "--net=host", 95 cephImage) 96 }() 97 dockercli.PrintToStdout(t, stdout, stdoutPipe, "monmap e1: 1 mons at") 98 if err != nil { 99 t.Fatal(err) 100 } 101 } 102 103 // RunMockCephDaemon sets up a single Ceph OSD 104 func RunMockCephDaemon(t *testing.T, name string, etcdPort string) { 105 var err error 106 cli, stdout, stdoutPipe := dockercli.NewClient() 107 cephImage := "deis/store-daemon:" + utils.BuildTag() 108 ipaddr := utils.HostAddress() 109 fmt.Printf("--- Running deis/mock-ceph-daemon at %s\n", ipaddr) 110 done := make(chan bool, 1) 111 go func() { 112 done <- true 113 _ = cli.CmdRm("-f", name) 114 err = dockercli.RunContainer(cli, 115 "--name", name, 116 "--rm", 117 "-e", "HOST="+ipaddr, 118 "-e", "ETCD_PORT="+etcdPort, 119 "--net=host", 120 cephImage) 121 }() 122 dockercli.PrintToStdout(t, stdout, stdoutPipe, "journal close /var/lib/ceph/osd/ceph-0/journal") 123 if err != nil { 124 t.Fatal(err) 125 } 126 } 127 128 // RunMockCephMetadata starts a mock Ceph MDS 129 func RunMockCephMetadata(t *testing.T, name string, etcdPort string) { 130 var err error 131 cli, stdout, stdoutPipe := dockercli.NewClient() 132 cephImage := "deis/store-metadata:" + utils.BuildTag() 133 ipaddr := utils.HostAddress() 134 fmt.Printf("--- Running deis/mock-ceph-metadata at %s\n", ipaddr) 135 done2 := make(chan bool, 1) 136 go func() { 137 done2 <- true 138 _ = cli.CmdRm("-f", name) 139 err = dockercli.RunContainer(cli, 140 "--name", name, 141 "--rm", 142 "-e", "ETCD_PORT="+etcdPort, 143 "-e", "HOST="+ipaddr, 144 "--net=host", 145 cephImage) 146 }() 147 dockercli.PrintToStdout(t, stdout, stdoutPipe, "mds.0.1 active_start") 148 if err != nil { 149 t.Fatal(err) 150 } 151 } 152 153 // RunMockCephGateway starts a mock S3 endpoint used for component testing 154 func RunMockCephGateway(t *testing.T, name string, port string, etcdPort string) { 155 var err error 156 cli, stdout, stdoutPipe := dockercli.NewClient() 157 cephImage := "deis/store-gateway:" + utils.BuildTag() 158 ipaddr := utils.HostAddress() 159 cephAddr := ipaddr + ":" + port 160 fmt.Printf("--- Running deis/mock-ceph-gateway at %s\n", cephAddr) 161 done2 := make(chan bool, 1) 162 go func() { 163 done2 <- true 164 _ = cli.CmdRm("-f", name) 165 err = dockercli.RunContainer(cli, 166 "--name", name, 167 "-h", "deis-store-gateway", 168 "--rm", 169 "-p", port+":"+"8888", 170 "-e", "ETCD_PORT="+etcdPort, 171 "-e", "HOST="+ipaddr, 172 "-e", "EXTERNAL_PORT="+port, 173 cephImage) 174 }() 175 dockercli.PrintToStdout(t, stdout, stdoutPipe, "deis-store-gateway running...") 176 if err != nil { 177 t.Fatal(err) 178 } 179 }