diff --git a/dockertests/const.go b/dockertests/const.go
index 4f4266f..3b309e1 100644
--- a/dockertests/const.go
+++ b/dockertests/const.go
@@ -1,6 +1,5 @@
 package dockertests
 
-
 const (
 	dockerCsPort              string = "9000"
 	dockerSsPort              string = "9001"
@@ -12,4 +11,7 @@
 	configConsumerSecret             = "apigeesync_consumer_secret"
 	configName                       = "apigeesync_instance_name"
 	ApigeeSyncEventSelector          = "ApigeeSync"
+	testInitUser = "dockerTestInit"
 )
+
+
diff --git a/dockertests/docker_test.go b/dockertests/docker_test.go
index 2980483..d2b45bb 100644
--- a/dockertests/docker_test.go
+++ b/dockertests/docker_test.go
@@ -10,16 +10,15 @@
 	"os"
 	"testing"
 	"time"
+	"encoding/json"
 )
 
-
-
 var (
-	services apid.Services
-	log      apid.LogService
-	data     apid.DataService
-	config   apid.ConfigService
-	pgUrl    string
+	services  apid.Services
+	log       apid.LogService
+	data      apid.DataService
+	config    apid.ConfigService
+	pgUrl     string
 	pgManager *ManagementPg
 )
 
@@ -28,10 +27,17 @@
  * apidApigeeSync and runs tests.
  */
 var _ = BeforeSuite(func() {
-	hostname := "http://" + os.Getenv("APIGEE_SYNC_DOCKER_IP")
-	pgUrl = os.Getenv("APIGEE_SYNC_DOCKER_PG_URL")
+	//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")
 
+	// init pg driver and data
+	var err error
+	pgManager, err = InitDb(pgUrl)
+	Expect(err).Should(Succeed())
+	initPgData()
+
+
 	apid.Initialize(factory.DefaultServicesFactory())
 	config = apid.Config()
 
@@ -43,18 +49,15 @@
 	testServer := initDummyAuthServer()
 
 	// Setup dependencies
-	config.Set(configChangeServerBaseURI, hostname+":"+dockerCsPort+"/")
-	config.Set(configSnapServerBaseURI, hostname+":"+dockerSsPort+"/")
+	//config.Set(configChangeServerBaseURI, hostname+":"+dockerCsPort+"/")
+	//config.Set(configSnapServerBaseURI, hostname+":"+dockerSsPort+"/")
 	config.Set(configProxyServerBaseURI, testServer.URL)
 
 	// init plugin
 	apid.RegisterPlugin(initPlugin)
 	apid.InitializePlugins("dockerTest")
 
-	// init pg driver
-	var err error
-	pgManager, err = InitDb(pgUrl)
-	Expect(err).Should(Succeed())
+
 })
 
 var _ = Describe("dockerIT", func() {
@@ -64,29 +67,16 @@
 
 		})
 
+		var _ = AfterEach(func() {
+			pgManager.Cleanup()
+		})
+
 		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))
 
-			cluster := &apidCluster{
-				id: "fed02735-0589-4998-bf00-e4d0df7af45b",
-				name: "apidcA",
-				description: "desc",
-				appName: "UOA",
-				created: time.Now(),
-				createdBy: "userA",
-				updated: time.Now(),
-				updatedBy: "userA",
-				changeSelector: "fed02735-0589-4998-bf00-e4d0df7af45b",
-			}
-
-			tx, err := pgManager.BeginTransaction()
-			Expect(err).Should(Succeed())
-			pgManager.InsertApidCluster(tx, cluster)
-
 			time.Sleep(5 * time.Second)
-			Expect(1).To(Equal(1))
 		}, 30)
 	})
 })
@@ -116,6 +106,98 @@
 	return pluginData, nil
 }
 
+func initPgData() {
+	clusterId := "4c6bb536-0d64-43ca-abae-17c08f1a7e58"
+	scopeId := "ae418890-2c22-4c6a-b218-69e261034b96"
+	deploymentId := "633af126-ee79-4a53-bef7-7ba30da8aad6"
+	bundleConfigId := "613ce223-6c73-43f4-932c-3c69b0c7c65d"
+	bundleConfigName := "good"
+	bundleUri := "https://gist.github.com/alexkhimich/843cf70ffd6a8b4d44442876ba0487b7/archive/d74360596ff9a4320775d590b3f5a91bdcdf61d2.zip"
+	t := time.Now()
+
+	cluster := &apidClusterRow{
+		id:             clusterId,
+		name:           "apidcA",
+		description:    "desc",
+		appName:        "UOA",
+		created:        t,
+		createdBy:      testInitUser,
+		updated:        t,
+		updatedBy:      testInitUser,
+		changeSelector: clusterId,
+	}
+
+	ds := &dataScopeRow{
+		id:             scopeId,
+		clusterId:      clusterId,
+		scope:          "abc1",
+		org:            "org1",
+		env:            "env1",
+		created:        t,
+		createdBy:      testInitUser,
+		updated:        t,
+		updatedBy:      testInitUser,
+		changeSelector: clusterId,
+	}
+
+	bf := bundleConfigData{
+		Id: bundleConfigId,
+		Created: t.Format(time.RFC3339),
+		CreatedBy: testInitUser,
+		Updated: t.Format(time.RFC3339),
+		UpdatedBy: testInitUser,
+		Name: bundleConfigName,
+		Uri: bundleUri,
+	}
+
+	jsonBytes, err := json.Marshal(bf)
+	Expect(err).Should(Succeed())
+
+	log.Warn(string(jsonBytes))
+
+	bfr := &bundleConfigRow{
+		id: bf.Id,
+		scopeId: scopeId,
+		name: bf.Name,
+		uri: bf.Uri,
+		checksumType: "",
+		checksum: "",
+		created: t,
+		createdBy: bf.CreatedBy,
+		updated: t,
+		updatedBy: bf.UpdatedBy,
+	}
+
+	d := &deploymentRow{
+		id: deploymentId,
+		configId: bundleConfigId,
+		clusterId: clusterId,
+		scopeId: scopeId,
+		bundleConfigName: bundleConfigName,
+		bundleConfigJson: string(jsonBytes),
+		configJson: "{}",
+		created: t,
+		createdBy: testInitUser,
+		updated: t,
+		updatedBy: testInitUser,
+		changeSelector: clusterId,
+	}
+
+	tx, err := pgManager.BeginTransaction()
+	defer tx.Rollback()
+	Expect(err).Should(Succeed())
+	err = pgManager.InsertApidCluster(tx, cluster)
+	Expect(err).Should(Succeed())
+	err = pgManager.InsertDataScope(tx, ds)
+	Expect(err).Should(Succeed())
+	err = pgManager.InsertBundleConfig(tx, bfr)
+	Expect(err).Should(Succeed())
+	err = pgManager.InsertDeployment(tx, d)
+	Expect(err).Should(Succeed())
+	err = tx.Commit()
+	Expect(err).Should(Succeed())
+}
+
 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 bacd9cc..787bccb 100644
--- a/dockertests/management_pg.go
+++ b/dockertests/management_pg.go
@@ -3,7 +3,6 @@
 import (
 	"database/sql"
 	_ "github.com/lib/pq"
-	"time"
 )
 
 type ManagementPg struct {
@@ -11,18 +10,6 @@
 	pg  *sql.DB
 }
 
-type apidCluster struct {
-	id          string
-	name        string
-	description string
-	appName     string
-	created     time.Time
-	createdBy   string
-	updated     time.Time
-	updatedBy   string
-	changeSelector string
-}
-
 func InitDb(dbUrl string) (*ManagementPg, error) {
 	db, err := sql.Open("postgres", dbUrl)
 	if err != nil {
@@ -35,7 +22,7 @@
 	}, nil
 }
 
-func (m *ManagementPg) InsertApidCluster(tx *sql.Tx, cluster *apidCluster) error {
+func (m *ManagementPg) InsertApidCluster(tx *sql.Tx, cluster *apidClusterRow) error {
 	stmt, err := tx.Prepare(`INSERT INTO edgex.apid_cluster(
 			id,
 			name,
@@ -67,8 +54,119 @@
 	return err
 }
 
+func (m *ManagementPg) InsertDataScope(tx *sql.Tx, ds *dataScopeRow) error {
+	stmt, err := tx.Prepare(`INSERT INTO edgex.data_scope (
+			id,
+			apid_cluster_id,
+			scope,
+			org,
+			env,
+			created,
+			created_by,
+			updated,
+			updated_by,
+			_change_selector
+			)
+			VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)`)
+	if err != nil {
+		return err
+	}
+
+	_, err = stmt.Exec(
+		ds.id,
+		ds.clusterId,
+		ds.scope,
+		ds.org,
+		ds.env,
+		ds.created,
+		ds.createdBy,
+		ds.updated,
+		ds.updatedBy,
+		ds.changeSelector,
+	)
+
+	return err
+}
+
+func (m *ManagementPg) InsertBundleConfig(tx *sql.Tx, bf *bundleConfigRow) error {
+	stmt, err := tx.Prepare(`INSERT INTO edgex.bundle_config (
+			id,
+			data_scope_id,
+			name,
+			uri,
+			checksumtype,
+			checksum,
+			created,
+			created_by,
+			updated,
+			updated_by
+			)
+			VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)`)
+	if err != nil {
+		return err
+	}
+
+	_, err = stmt.Exec(
+		bf.id,
+		bf.scopeId,
+		bf.name,
+		bf.uri,
+		bf.checksumType,
+		bf.checksum,
+		bf.created,
+		bf.createdBy,
+		bf.updated,
+		bf.updatedBy,
+	)
+
+	return err
+}
+
+func (m *ManagementPg) InsertDeployment(tx *sql.Tx, d *deploymentRow) error {
+	stmt, err := tx.Prepare(`INSERT INTO edgex.deployment (
+			id,
+			bundle_config_id,
+			apid_cluster_id,
+			data_scope_id,
+			bundle_config_name,
+			bundle_config_json,
+			config_json,
+			created,
+			created_by,
+			updated,
+			updated_by,
+			_change_selector,
+			)
+			VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)`)
+	if err != nil {
+		return err
+	}
+
+	_, err = stmt.Exec(
+		d.id,
+		d.configId,
+		d.clusterId,
+		d.scopeId,
+		d.bundleConfigName,
+		d.bundleConfigJson,
+		d.configJson,
+		d.created,
+		d.createdBy,
+		d.updated,
+		d.updatedBy,
+		d.changeSelector,
+	)
+
+	return err
+}
+
 func (m *ManagementPg) BeginTransaction() (*sql.Tx, error) {
 	tx, err := m.pg.Begin()
 	return tx, err
 }
 
+func (m *ManagementPg) Cleanup() error {
+	cleanupSql := "DELETE FROM edgex.apid_cluster WHERE created_by!='" + testInitUser + "';"
+	_, err := m.pg.Exec(cleanupSql)
+	return err
+}
diff --git a/dockertests/pg_table_data.go b/dockertests/pg_table_data.go
new file mode 100644
index 0000000..9b068be
--- /dev/null
+++ b/dockertests/pg_table_data.go
@@ -0,0 +1,76 @@
+package dockertests
+
+import "time"
+
+type apidClusterRow struct {
+	id             string
+	name           string
+	description    string
+	appName        string
+	created        time.Time
+	createdBy      string
+	updated        time.Time
+	updatedBy      string
+	changeSelector string
+}
+
+/* FOREIGN KEY (apid_cluster_id)
+ * REFERENCES apid_cluster(id) ON DELETE CASCADE
+ */
+type dataScopeRow struct {
+	id             string
+	clusterId      string
+	scope          string
+	org            string
+	env            string
+	created        time.Time
+	createdBy      string
+	updated        time.Time
+	updatedBy      string
+	changeSelector string
+}
+
+/* FOREIGN KEY (data_scope_id)
+ * REFERENCES data_scope(id) ON DELETE CASCADE
+ */
+type bundleConfigRow struct {
+	id           string
+	scopeId      string
+	name         string
+	uri          string
+	checksumType string
+	checksum     string
+	created      time.Time
+	createdBy    string
+	updated      time.Time
+	updatedBy    string
+}
+
+/* FOREIGN KEY (bundle_config_id)
+ * REFERENCES bundle_config(id) ON DELETE CASCADE
+ */
+type deploymentRow struct {
+	id               string
+	configId         string
+	clusterId        string
+	scopeId          string
+	bundleConfigName string
+	bundleConfigJson string
+	configJson       string
+	created          time.Time
+	createdBy        string
+	updated          time.Time
+	updatedBy        string
+	changeSelector   string
+}
+
+
+type bundleConfigData struct {
+	Id string `json:"id"`
+	Created string `json:"created"`
+	CreatedBy string `json:"createdBy"`
+	Updated string `json:"updated"`
+	UpdatedBy string `json:"updatedBy"`
+	Name string `json:"name"`
+	Uri string `json:"uri"`
+}
\ No newline at end of file
diff --git a/glide.yaml b/glide.yaml
index 643a0c9..b583bf1 100644
--- a/glide.yaml
+++ b/glide.yaml
@@ -16,6 +16,10 @@
 import:
 - package: github.com/30x/apid-core
   version: master
+- package: github.com/lib/pq
+  version: master
 testImport:
 - package: github.com/onsi/ginkgo/ginkgo
+  version: master
 - package: github.com/onsi/gomega
+  version: master
