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
+}
