add test case
diff --git a/dockertests/const.go b/dockertests/const.go index 3b309e1..c6de726 100644 --- a/dockertests/const.go +++ b/dockertests/const.go
@@ -4,6 +4,7 @@ dockerCsPort string = "9000" dockerSsPort string = "9001" pluginName = "apigeeSyncDockerTest" + configApidClusterId = "apigeesync_cluster_id" configProxyServerBaseURI = "apigeesync_proxy_server_base" configSnapServerBaseURI = "apigeesync_snapshot_server_base" configChangeServerBaseURI = "apigeesync_change_server_base"
diff --git a/dockertests/docker_test.go b/dockertests/docker_test.go index d2b45bb..efce091 100644 --- a/dockertests/docker_test.go +++ b/dockertests/docker_test.go
@@ -11,36 +11,40 @@ "testing" "time" "encoding/json" + "github.com/apigee-labs/transicator/common" ) var ( services apid.Services log apid.LogService - data apid.DataService + dataService apid.DataService config apid.ConfigService pgUrl string pgManager *ManagementPg + clusterIdFromConfig string ) /* * This test suite acts like a dummy plugin. It listens to events emitted by * apidApigeeSync and runs tests. */ -var _ = BeforeSuite(func() { +var _ = BeforeSuite(func(done Done) { + defer GinkgoRecover() //hostname := "http://" + os.Getenv("APIGEE_SYNC_DOCKER_IP") pgUrl = os.Getenv("APIGEE_SYNC_DOCKER_PG_URL") + "?sslmode=disable" os.Setenv("APID_CONFIG_FILE", "./apid_config.yaml") + + + apid.Initialize(factory.DefaultServicesFactory()) + config = apid.Config() + // init pg driver and data var err error pgManager, err = InitDb(pgUrl) Expect(err).Should(Succeed()) initPgData() - - apid.Initialize(factory.DefaultServicesFactory()) - config = apid.Config() - // Auth Server config.Set(configName, "dockerIT") config.Set(configConsumerKey, "dummyKey") @@ -48,6 +52,13 @@ //config.Set(configApidClusterId, "testClusterId") testServer := initDummyAuthServer() + // hang until snapshot received + apid.Events().ListenFunc(ApigeeSyncEventSelector, func(event apid.Event){ + if _, ok := event.(*common.Snapshot); ok { + close(done) + } + }) + // Setup dependencies //config.Set(configChangeServerBaseURI, hostname+":"+dockerCsPort+"/") //config.Set(configSnapServerBaseURI, hostname+":"+dockerSsPort+"/") @@ -58,6 +69,10 @@ apid.InitializePlugins("dockerTest") +}, 5) + +var _ = AfterSuite(func() { + pgManager.CleanupAll() }) var _ = Describe("dockerIT", func() { @@ -68,19 +83,65 @@ }) var _ = AfterEach(func() { - pgManager.Cleanup() + pgManager.CleanupTest() }) - It("should succesfully download table from pg", func() { - log.Debug("CS: " + config.GetString(configChangeServerBaseURI)) - log.Debug("SS: " + config.GetString(configSnapServerBaseURI)) - log.Debug("Auth: " + config.GetString(configProxyServerBaseURI)) + It("should succesfully download new table from pg", func(done Done) { + //log.Debug("CS: " + config.GetString(configChangeServerBaseURI)) + //log.Debug("SS: " + config.GetString(configSnapServerBaseURI)) + //log.Debug("Auth: " + config.GetString(configProxyServerBaseURI)) + tableName := "docker_test" + apid.Events().ListenFunc(ApigeeSyncEventSelector, func(event apid.Event){ + if s, ok := event.(*common.Snapshot); ok { + go func() { + defer GinkgoRecover() + sqliteDb, err := dataService.DBVersion(s.SnapshotInfo) + Expect(err).Should(Succeed()) + Expect(verifyTestTable(tableName, sqliteDb)).To(BeTrue()) + close(done) + }() + } + }) - time.Sleep(5 * time.Second) - }, 30) + createTestTable(tableName); + + + }, 5) }) }) +func createTestTable(tableName string) { + tx, err := pgManager.BeginTransaction() + Expect(err).Should(Succeed()) + defer tx.Rollback() + _, err = tx.Exec("CREATE TABLE edgex." + tableName + " (id varchar primary key, val integer, _change_selector varchar);") + Expect(err).Should(Succeed()) + _, err = tx.Exec("ALTER TABLE edgex." + tableName + " replica identity full;") + Expect(err).Should(Succeed()) + _, err = tx.Exec("INSERT INTO edgex." + tableName + " values ('one', 1, 'foo');") + Expect(err).Should(Succeed()) + _, err = tx.Exec("INSERT INTO edgex." + tableName + " values ('two', 2, 'bar');") + Expect(err).Should(Succeed()) + _, err = tx.Exec("INSERT INTO edgex." + tableName + " values ('three', 3, '" + clusterIdFromConfig + "');") + Expect(err).Should(Succeed()) + tx.Commit() +} + +func verifyTestTable(targetTableName string, sqliteDb apid.DB) bool { + rows, err := sqliteDb.Query("SELECT DISTINCT tableName FROM _transicator_tables;") + Expect(err).Should(Succeed()) + defer rows.Close() + for rows.Next() { + var tableName string + err = rows.Scan(&tableName) + Expect(err).Should(Succeed()) + if tableName==targetTableName { + return true + } + } + return false +} + func initDummyAuthServer() (testServer *httptest.Server) { testRouter := apid.API().Router() testServer = httptest.NewServer(testRouter) @@ -92,7 +153,7 @@ func initPlugin(s apid.Services) (apid.PluginData, error) { services = s log = services.Log().ForModule(pluginName) - data = services.Data() + dataService = services.Data() var pluginData = apid.PluginData{ Name: pluginName, @@ -107,7 +168,8 @@ } func initPgData() { - clusterId := "4c6bb536-0d64-43ca-abae-17c08f1a7e58" + clusterIdFromConfig = config.GetString(configApidClusterId)//"4c6bb536-0d64-43ca-abae-17c08f1a7e58" + clusterId := clusterIdFromConfig scopeId := "ae418890-2c22-4c6a-b218-69e261034b96" deploymentId := "633af126-ee79-4a53-bef7-7ba30da8aad6" bundleConfigId := "613ce223-6c73-43f4-932c-3c69b0c7c65d" @@ -153,7 +215,6 @@ jsonBytes, err := json.Marshal(bf) Expect(err).Should(Succeed()) - log.Warn(string(jsonBytes)) bfr := &bundleConfigRow{ id: bf.Id,
diff --git a/dockertests/management_pg.go b/dockertests/management_pg.go index 787bccb..cb4239a 100644 --- a/dockertests/management_pg.go +++ b/dockertests/management_pg.go
@@ -135,7 +135,7 @@ created_by, updated, updated_by, - _change_selector, + _change_selector ) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)`) if err != nil { @@ -165,8 +165,14 @@ return tx, err } -func (m *ManagementPg) Cleanup() error { +func (m *ManagementPg) CleanupTest() error { cleanupSql := "DELETE FROM edgex.apid_cluster WHERE created_by!='" + testInitUser + "';" _, err := m.pg.Exec(cleanupSql) return err } + +func (m *ManagementPg) CleanupAll() error { + cleanupSql := "DELETE FROM edgex.apid_cluster;" + _, err := m.pg.Exec(cleanupSql) + return err +}