github.com/techend/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  }