add new test of enum
diff --git a/dockertests/docker_test.go b/dockertests/docker_test.go
index 0851a41..93192dc 100644
--- a/dockertests/docker_test.go
+++ b/dockertests/docker_test.go
@@ -106,11 +106,12 @@
})
It("should succesfully download new table from pg", func(done Done) {
- tableName := "docker_test_a"
+ tableName := "docker_test_download"
targetTablename := "edgex_" + tableName
handler := &newTableHandler{
targetTablename: targetTablename,
done: done,
+ verifyFunc: verifyTestTableExist,
}
apid.Events().Listen(ApigeeSyncEventSelector, handler)
@@ -119,17 +120,32 @@
}, 1)
It("should get data according to data scope", func(done Done) {
- tableName := "docker_test_b"
+ tableName := "docker_test_scope"
targetTablename := "edgex_" + tableName
- handler := &newTableScopeHandler{
+ handler := &newTableHandler{
targetTablename: targetTablename,
done: done,
+ verifyFunc: verifyTestTableData,
}
apid.Events().Listen(ApigeeSyncEventSelector, handler)
createTestTableWithData(tableName)
}, 1)
+
+ It("should replicate ENUM type of pg correctly", func(done Done) {
+ tableName := "docker_test_enum"
+ targetTablename := "edgex_" + tableName
+ handler := &newTableHandler{
+ targetTablename: targetTablename,
+ done: done,
+ verifyFunc: verifyTestTableEnum,
+ }
+
+ apid.Events().Listen(ApigeeSyncEventSelector, handler)
+ createTestTableWithEnum(tableName)
+
+ }, 1)
})
})
@@ -163,6 +179,25 @@
tx.Commit()
}
+func createTestTableWithEnum(tableName string) {
+ tx, err := pgManager.BeginTransaction()
+ Expect(err).Should(Succeed())
+ defer tx.Rollback()
+ _, err = tx.Exec("CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');")
+ Expect(err).Should(Succeed())
+ _, err = tx.Exec("CREATE TABLE edgex." + tableName + " (id varchar primary key, val mood, _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', 'sad', 'foo');")
+ Expect(err).Should(Succeed())
+ _, err = tx.Exec("INSERT INTO edgex." + tableName + " values ('two', 'ok', 'bar');")
+ Expect(err).Should(Succeed())
+ _, err = tx.Exec("INSERT INTO edgex." + tableName + " values ('three', 'happy', '" + clusterIdFromConfig + "');")
+ Expect(err).Should(Succeed())
+ tx.Commit()
+}
+
func dropTestTable(targetTableName string, sqliteDb apid.DB) {
tx, err := pgManager.BeginTransaction()
Expect(err).Should(Succeed())
@@ -300,6 +335,7 @@
type newTableHandler struct {
targetTablename string
done Done
+ verifyFunc func (string, apid.DB)
}
func (n *newTableHandler) Handle(event apid.Event) {
@@ -307,13 +343,13 @@
defer GinkgoRecover()
sqliteDb, err := dataService.DBVersion(s.SnapshotInfo)
Expect(err).Should(Succeed())
- Expect(verifyTestTableExist(n.targetTablename, sqliteDb)).To(BeTrue())
+ n.verifyFunc(n.targetTablename, sqliteDb)
apid.Events().StopListening(ApigeeSyncEventSelector, n)
close(n.done)
}
}
-func verifyTestTableExist(targetTableName string, sqliteDb apid.DB) bool {
+func verifyTestTableExist(targetTableName string, sqliteDb apid.DB) {
rows, err := sqliteDb.Query("SELECT DISTINCT tableName FROM _transicator_tables;")
Expect(err).Should(Succeed())
defer rows.Close()
@@ -323,26 +359,10 @@
Expect(err).Should(Succeed())
if tableName == targetTableName {
- return true
+ return
}
}
- return false
-}
-
-type newTableScopeHandler struct {
- targetTablename string
- done Done
-}
-
-func (n *newTableScopeHandler) Handle(event apid.Event) {
- if s, ok := event.(*common.Snapshot); ok {
- defer GinkgoRecover()
- sqliteDb, err := dataService.DBVersion(s.SnapshotInfo)
- Expect(err).Should(Succeed())
- verifyTestTableData(n.targetTablename, sqliteDb)
- apid.Events().StopListening(ApigeeSyncEventSelector, n)
- close(n.done)
- }
+ Fail("Table " + targetTableName + " doesn'r exist!")
}
func verifyTestTableData(targetTableName string, sqliteDb apid.DB) {
@@ -360,6 +380,21 @@
Expect(count).To(Equal(1))
}
+func verifyTestTableEnum(targetTableName string, sqliteDb apid.DB) {
+ rows, err := sqliteDb.Query("SELECT val FROM " + targetTableName + ";")
+ Expect(err).Should(Succeed())
+ defer rows.Close()
+ count := 0
+ for rows.Next() {
+ var val string
+ err = rows.Scan(&val)
+ Expect(err).Should(Succeed())
+ Expect(val).To(Equal("happy"))
+ count += 1
+ }
+ Expect(count).To(Equal(1))
+}
+
func TestDockerApigeeSync(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "ApigeeSync Docker Suite")
diff --git a/dockertests/management_pg.go b/dockertests/management_pg.go
index 6c7dfd4..bbe28e9 100644
--- a/dockertests/management_pg.go
+++ b/dockertests/management_pg.go
@@ -195,6 +195,8 @@
* Only test data for the whole suite will remain in the pg.
*/
func (m *ManagementPg) CleanupTest() error {
+
+ // clean tables
tablesToDelete := make([]string, 0)
rows, err := m.pg.Query("SELECT table_name FROM information_schema.tables WHERE table_schema='edgex';")
if err != nil {
@@ -222,7 +224,34 @@
}
cleanupSql := "DELETE FROM edgex.apid_cluster WHERE created_by!='" + testInitUser + "';"
_, err = m.pg.Exec(cleanupSql)
- return err
+ if err != nil {
+ return err
+ }
+
+ // clean enum types
+ typesToDelete := make([]string, 0)
+ typeRows, err := m.pg.Query("SELECT DISTINCT pg_type.typname AS enumtype FROM pg_type JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid;")
+ if err != nil {
+ return err
+ }
+ defer typeRows.Close()
+ for typeRows.Next() {
+ var typeName string
+ err = typeRows.Scan(&typeName)
+ if err != nil {
+ return err
+ }
+ typesToDelete = append(typesToDelete, typeName)
+ }
+
+ for _, typeName := range typesToDelete {
+ cleanupSql := "DROP TYPE edgex." + typeName + ";"
+ _, err := m.pg.Exec(cleanupSql)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
}
func (m *ManagementPg) CleanupAll() error {