Add more test cases for all KMS tables (INS/UPD/DEL) and fixed issues
found while testing them
diff --git a/api_test.go b/api_test.go
index 369d540..7a0b86a 100644
--- a/api_test.go
+++ b/api_test.go
@@ -2,6 +2,7 @@
 
 import (
 	"encoding/json"
+	"github.com/apigee-labs/transicator/common"
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 	"io/ioutil"
@@ -13,14 +14,250 @@
 
 var _ = Describe("api", func() {
 
-	Context("verifyAPIKey() directly", func() {
+	Context("DB Inserts/Deletes verification", func() {
+
+		It("Positive DB test for Insert operations", func() {
+			db := getDB()
+			txn, err := db.Begin()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			for i := 0; i < 10; i++ {
+				var rows []common.Row
+				srvItems := common.Row{}
+				result := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "api_product_" + result,
+					Type:  1,
+				}
+				srvItems["id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "{/**, /test}",
+					Type:  1,
+				}
+				srvItems["api_resources"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "{Env_0, Env_1}",
+					Type:  1,
+				}
+				srvItems["environments"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  1,
+				}
+				srvItems["_change_selector"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "tenant_id_xxxx",
+					Type:  1,
+				}
+				srvItems["tenant_id"] = scv
+				rows = append(rows, srvItems)
+				res := insertAPIproducts(rows, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			for i := 0; i < 10; i++ {
+				var rows []common.Row
+				srvItems := common.Row{}
+				result := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "developer_id_" + result,
+					Type:  1,
+				}
+				srvItems["id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "test@apigee.com",
+					Type:  1,
+				}
+				srvItems["email"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Active",
+					Type:  1,
+				}
+				srvItems["status"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Apigee",
+					Type:  1,
+				}
+				srvItems["firstName"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Google",
+					Type:  1,
+				}
+				srvItems["lastName"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  1,
+				}
+				srvItems["_change_selector"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "tenant_id_xxxx",
+					Type:  1,
+				}
+				srvItems["tenant_id"] = scv
+
+				rows = append(rows, srvItems)
+				res := insertDevelopers(rows, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			var j, k int
+			for i := 0; i < 10; i++ {
+				resulti := strconv.FormatInt(int64(i), 10)
+				for j = k; j < 10+k; j++ {
+					var rows []common.Row
+
+					srvItems := common.Row{}
+					resultj := strconv.FormatInt(int64(j), 10)
+
+					scv := &common.ColumnVal{
+						Value: "application_id_" + resultj,
+						Type:  1,
+					}
+					srvItems["id"] = scv
+
+					scv = &common.ColumnVal{
+						Value: "developer_id_" + resulti,
+						Type:  1,
+					}
+					srvItems["developer_id"] = scv
+
+					scv = &common.ColumnVal{
+						Value: "approved",
+						Type:  1,
+					}
+					srvItems["status"] = scv
+
+					scv = &common.ColumnVal{
+						Value: "http://apigee.com",
+						Type:  1,
+					}
+					srvItems["callback_url"] = scv
+
+					scv = &common.ColumnVal{
+						Value: "Org_0",
+						Type:  1,
+					}
+					srvItems["_change_selector"] = scv
+
+					scv = &common.ColumnVal{
+						Value: "tenant_id_xxxx",
+						Type:  1,
+					}
+					srvItems["tenant_id"] = scv
+					rows = append(rows, srvItems)
+					res := insertApplications(rows, txn)
+					Expect(res).Should(BeTrue())
+				}
+				k = j
+			}
+
+			for i := 0; i < 10; i++ {
+				var rows []common.Row
+				srvItems := common.Row{}
+				result := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "app_credential_" + result,
+					Type:  1,
+				}
+				srvItems["id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "application_id_" + result,
+					Type:  1,
+				}
+				srvItems["app_id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "approved",
+					Type:  1,
+				}
+				srvItems["status"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  1,
+				}
+				srvItems["_change_selector"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "tenant_id_xxxx",
+					Type:  1,
+				}
+				srvItems["tenant_id"] = scv
+				rows = append(rows, srvItems)
+				res := insertCredentials(rows, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			for i := 0; i < 10; i++ {
+				var rows []common.Row
+				srvItems := common.Row{}
+				result := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "api_product_" + result,
+					Type:  1,
+				}
+				srvItems["apiprdt_id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "application_id_" + result,
+					Type:  1,
+				}
+				srvItems["app_id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "app_credential_" + result,
+					Type:  1,
+				}
+				srvItems["appcred_id"] = scv
+				scv = &common.ColumnVal{
+					Value: "approved",
+					Type:  1,
+				}
+				srvItems["status"] = scv
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  1,
+				}
+				srvItems["_change_selector"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "tenant_id_xxxx",
+					Type:  1,
+				}
+				srvItems["tenant_id"] = scv
+				rows = append(rows, srvItems)
+				res := insertAPIProductMappers(rows, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			txn.Commit()
+			var count int64
+			db.QueryRow("select count(*) from data_scope").Scan(&count)
+			log.Info("Found ", count)
+
+		})
 
 		It("should reject a bad key", func() {
 			v := url.Values{
-				"key": []string{"credential_x"},
-				"uriPath": []string{"/test"},
+				"key":       []string{"credential_x"},
+				"uriPath":   []string{"/test"},
 				"scopeuuid": []string{"ABCDE"},
-				"action": []string{"verify"},
+				"action":    []string{"verify"},
 			}
 			rsp, err := verifyAPIKey(v)
 			Expect(err).ShouldNot(HaveOccurred())
@@ -31,38 +268,15 @@
 			Expect(respj.ErrInfo.ErrorCode).Should(Equal("REQ_ENTRY_NOT_FOUND"))
 
 		})
-		/*
-			It("should reject a key once it's deleted", func() {
-				pd0 := &DataPayload{
-					EntityIdentifier: "app_credential_0",
-				}
-				res := deleteCredential(*pd0, db)
-				Expect(res).Should(BeTrue())
 
-				var respj kmsResponseFail
-				v := url.Values{
-					"key": []string{"app_credential_0"},
-					"path": []string{"/test"},
-					"env": []string{"Env_0"},
-					"organization": []string{"Org_0"},
-					"action": []string{"verify"},
-				}
-				rsp, err := verifyAPIKey(v)
-				Expect(err).ShouldNot(HaveOccurred())
-
-				json.Unmarshal(rsp, &respj)
-				Expect(respj.Type).Should(Equal("ErrorResult"))
-				Expect(respj.ErrInfo.ErrorCode).Should(Equal("REQ_ENTRY_NOT_FOUND"))
-			})
-		*/
 		It("should successfully verify good keys", func() {
 			for i := 1; i < 10; i++ {
 				resulti := strconv.FormatInt(int64(i), 10)
 				v := url.Values{
-					"key": []string{"app_credential_"+resulti},
-					"uriPath": []string{"/test"},
+					"key":       []string{"app_credential_" + resulti},
+					"uriPath":   []string{"/test"},
 					"scopeuuid": []string{"ABCDE"},
-					"action": []string{"verify"},
+					"action":    []string{"verify"},
 				}
 				rsp, err := verifyAPIKey(v)
 				Expect(err).ShouldNot(HaveOccurred())
@@ -73,9 +287,231 @@
 				Expect(respj.RspInfo.Key).Should(Equal("app_credential_" + resulti))
 			}
 		})
-	})
 
-	Context("access via API", func() {
+		It("Positive DB test for Delete operations", func() {
+			db := getDB()
+			txn, err := db.Begin()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			for i := 0; i < 10; i++ {
+				srvItems := common.Row{}
+				result := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "api_product_" + result,
+					Type:  3,
+				}
+				srvItems["apiprdt_id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "application_id_" + result,
+					Type:  3,
+				}
+				srvItems["app_id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "app_credential_" + result,
+					Type:  3,
+				}
+				srvItems["appcred_id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  3,
+				}
+				srvItems["_change_selector"] = scv
+
+				res := deleteAPIproductMapper(srvItems, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			for i := 0; i < 10; i++ {
+				srvItems := common.Row{}
+				result := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "app_credential_" + result,
+					Type:  3,
+				}
+				srvItems["id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  3,
+				}
+				srvItems["_change_selector"] = scv
+
+				res := deleteObject("APP_CREDENTIAL", srvItems, txn)
+				Expect(res).Should(BeTrue())
+			}
+			for i := 0; i < 100; i++ {
+
+				srvItems := common.Row{}
+				resultj := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "application_id_" + resultj,
+					Type:  1,
+				}
+				srvItems["id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  1,
+				}
+				srvItems["_change_selector"] = scv
+
+				res := deleteObject("APP", srvItems, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			for i := 0; i < 10; i++ {
+				srvItems := common.Row{}
+				result := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "developer_id_" + result,
+					Type:  1,
+				}
+				srvItems["id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  1,
+				}
+				srvItems["_change_selector"] = scv
+
+				res := deleteObject("DEVELOPER", srvItems, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			for i := 0; i < 10; i++ {
+				srvItems := common.Row{}
+				result := strconv.FormatInt(int64(i), 10)
+
+				scv := &common.ColumnVal{
+					Value: "api_product_" + result,
+					Type:  1,
+				}
+				srvItems["id"] = scv
+
+				scv = &common.ColumnVal{
+					Value: "Org_0",
+					Type:  1,
+				}
+				srvItems["_change_selector"] = scv
+
+				res := deleteObject("API_PRODUCT", srvItems, txn)
+				Expect(res).Should(BeTrue())
+			}
+
+			txn.Commit()
+
+		})
+
+		It("Negative cases for DB Deletes on KMS tables", func() {
+			db := getDB()
+			txn, err := db.Begin()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			srvItems := common.Row{}
+			result := "DEADBEEF"
+
+			scv := &common.ColumnVal{
+				Value: "api_product_" + result,
+				Type:  3,
+			}
+			srvItems["apiprdt_id"] = scv
+
+			scv = &common.ColumnVal{
+				Value: "application_id_" + result,
+				Type:  3,
+			}
+			srvItems["app_id"] = scv
+
+			scv = &common.ColumnVal{
+				Value: "app_credential_" + result,
+				Type:  3,
+			}
+			srvItems["appcred_id"] = scv
+
+			scv = &common.ColumnVal{
+				Value: "Org_0",
+				Type:  3,
+			}
+			srvItems["_change_selector"] = scv
+
+			res := deleteAPIproductMapper(srvItems, txn)
+			Expect(res).Should(BeFalse())
+
+			res = deleteObject("API_PRODUCT", srvItems, txn)
+			Expect(res).Should(BeFalse())
+
+			res = deleteObject("APP_CREDENTIAL", srvItems, txn)
+			Expect(res).Should(BeFalse())
+
+			res = deleteObject("DEVELOPER", srvItems, txn)
+			Expect(res).Should(BeFalse())
+
+			res = deleteObject("APP", srvItems, txn)
+			Expect(res).Should(BeFalse())
+
+			txn.Rollback()
+
+		})
+		It("Negative cases for DB Inserts/updates on KMS tables", func() {
+
+			db := getDB()
+			txn, err := db.Begin()
+			Expect(err).ShouldNot(HaveOccurred())
+
+			var rows []common.Row
+			srvItems := common.Row{}
+			result := "NOPRODID_BADCASE"
+			scv := &common.ColumnVal{
+				Value: "foobar_" + result,
+				Type:  1,
+			}
+			srvItems[result] = scv
+
+			scv = &common.ColumnVal{
+				Value: "{/**, /test}",
+				Type:  1,
+			}
+			srvItems["api_resources"] = scv
+
+			scv = &common.ColumnVal{
+				Value: "{Env_1, Env_0}",
+				Type:  1,
+			}
+			srvItems["environments"] = scv
+
+			scv = &common.ColumnVal{
+				Value: "Org_0",
+				Type:  1,
+			}
+			srvItems["_change_selector"] = scv
+
+			scv = &common.ColumnVal{
+				Value: "tenant_id_xxxx",
+				Type:  1,
+			}
+			srvItems["tenant_id"] = scv
+
+			rows = append(rows, srvItems)
+			res := insertAPIproducts(rows, txn)
+			Expect(res).Should(BeFalse())
+
+			res = insertApplications(rows, txn)
+			Expect(res).Should(BeFalse())
+
+			res = insertCredentials(rows, txn)
+			Expect(res).Should(BeFalse())
+
+			res = insertAPIProductMappers(rows, txn)
+			Expect(res).Should(BeFalse())
+
+		})
 
 		It("should reject a bad key", func() {
 
@@ -103,33 +539,5 @@
 			Expect(respj.Type).Should(Equal("ErrorResult"))
 			Expect(respj.ErrInfo.ErrorCode).Should(Equal("REQ_ENTRY_NOT_FOUND"))
 		})
-
-		It("should successfully verify a good key", func() {
-
-			uri, err := url.Parse(testServer.URL)
-			uri.Path = apiPath
-
-			v := url.Values{}
-			v.Add("key", "app_credential_1")
-			v.Add("scopeuuid", "ABCDE")
-			v.Add("uriPath", "/test")
-			v.Add("action", "verify")
-
-			client := &http.Client{}
-			req, err := http.NewRequest("POST", uri.String(), strings.NewReader(v.Encode()))
-			req.Header.Set("Content-Type", "application/x-www-form-urlencoded; param=value")
-
-			res, err := client.Do(req)
-			defer res.Body.Close()
-			Expect(err).ShouldNot(HaveOccurred())
-
-			var respj kmsResponseSuccess
-			body, err := ioutil.ReadAll(res.Body)
-			Expect(err).ShouldNot(HaveOccurred())
-			json.Unmarshal(body, &respj)
-			log.Info("Result test",respj)
-			Expect(respj.Type).Should(Equal("APIKeyContext"))
-			Expect(respj.RspInfo.Key).Should(Equal("app_credential_1"))
-		})
 	})
 })
diff --git a/init.go b/init.go
index a475420..98636b4 100644
--- a/init.go
+++ b/init.go
@@ -10,9 +10,9 @@
 )
 
 var (
-	log    apid.LogService
-	data   apid.DataService
-	events apid.EventsService
+	log      apid.LogService
+	data     apid.DataService
+	events   apid.EventsService
 	unsafeDB apid.DB
 	dbMux    sync.RWMutex
 )
@@ -160,7 +160,6 @@
 	}
 }
 
-
 func createApidClusterTables(db apid.DB) {
 	_, err := db.Exec(`
 CREATE TABLE apid_cluster (
@@ -196,4 +195,3 @@
 		log.Panic("Unable to initialize DB", err)
 	}
 }
-
diff --git a/listener.go b/listener.go
index b2e3f34..de80a9b 100644
--- a/listener.go
+++ b/listener.go
@@ -102,6 +102,12 @@
 		ele.Get("status", &status)
 		ele.Get("issued_at", &issuedAt)
 		ele.Get("tenant_id", &tenantId)
+
+		/* Mandatory params check */
+		if id == "" || scope == "" || tenantId == "" {
+			log.Error("INSERT APP_CREDENTIAL: i/p args missing")
+			return false
+		}
 		_, err = txn.Stmt(prep).Exec(
 			scope,
 			id,
@@ -152,6 +158,11 @@
 		ele.Get("updated_by", &LastModifiedBy)
 		ele.Get("tenant_id", &tenantId)
 
+		/* Mandatory params check */
+		if EntityIdentifier == "" || scope == "" || tenantId == "" {
+			log.Error("INSERT APP: i/p args missing")
+			return false
+		}
 		_, err = txn.Stmt(prep).Exec(
 			scope,
 			EntityIdentifier,
@@ -207,6 +218,11 @@
 		ele.Get("updated_at", &LastModifiedAt)
 		ele.Get("updated_by", &LastModifiedBy)
 
+		/* Mandatory params check */
+		if EntityIdentifier == "" || scope == "" || tenantId == "" {
+			log.Error("INSERT DEVELOPER: i/p args missing")
+			return false
+		}
 		_, err = txn.Stmt(prep).Exec(
 			scope,
 			Email,
@@ -253,6 +269,11 @@
 		ele.Get("environments", &env)
 		ele.Get("tenant_id", &tenantId)
 
+		/* Mandatory params check */
+		if apiProduct == "" || scope == "" || tenantId == "" {
+			log.Error("INSERT API_PRODUCT: i/p args missing")
+			return false
+		}
 		_, err = txn.Stmt(prep).Exec(
 			apiProduct,
 			res,
@@ -293,6 +314,12 @@
 		ele.Get("_change_selector", &Scope)
 		ele.Get("status", &Status)
 
+		/* Mandatory params check */
+		if ApiProduct == "" || AppId == "" || EntityIdentifier == "" || tenantId == "" || Scope == "" {
+			log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER : i/p args missing")
+			return false
+		}
+
 		/*
 		 * If the credentials has been successfully inserted, insert the
 		 * mapping entries associated with the credential
@@ -437,7 +464,7 @@
  */
 func deleteObject(object string, ele common.Row, txn *sql.Tx) bool {
 
-	var scope, apiProduct string
+	var scope, objid string
 	ssql := "DELETE FROM " + object + " WHERE id = $1 AND _change_selector = $2"
 	prep, err := txn.Prepare(ssql)
 	if err != nil {
@@ -446,16 +473,18 @@
 	}
 	defer prep.Close()
 	ele.Get("_change_selector", &scope)
-	ele.Get("id", &apiProduct)
+	ele.Get("id", &objid)
 
-	_, err = txn.Stmt(prep).Exec(apiProduct, scope)
-	if err != nil {
-		log.Error("DELETE ", object, " Failed: (", apiProduct, ", ", scope, ")", err)
-		return false
-	} else {
-		log.Debug("DELETE ", object, " Success: (", apiProduct, ", ", scope, ")")
-		return true
+	res, err := txn.Stmt(prep).Exec(objid, scope)
+	if err == nil {
+		affect, err := res.RowsAffected()
+		if err == nil && affect != 0 {
+			log.Debugf("DELETE %s (%s, %s) success.", object, objid, scope)
+			return true
+		}
 	}
+	log.Errorf("DELETE %s (%s, %s) failed.", object, objid, scope)
+	return false
 
 }
 
@@ -478,23 +507,14 @@
 	ele.Get("appcred_id", &EntityIdentifier)
 	ele.Get("_change_selector", &apid_scope)
 
-	_, err = txn.Stmt(prep).Exec(ApiProduct, AppId, EntityIdentifier, apid_scope)
-	if err != nil {
-		log.Error("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: (",
-			ApiProduct, ", ",
-			AppId, ", ",
-			EntityIdentifier, ", ",
-			apid_scope,
-			")",
-			err)
-		return false
-	} else {
-		log.Debug("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER Success: (",
-			ApiProduct, ", ",
-			AppId, ", ",
-			EntityIdentifier, ", ",
-			apid_scope,
-			")")
-		return true
+	res, err := txn.Stmt(prep).Exec(ApiProduct, AppId, EntityIdentifier, apid_scope)
+	if err == nil {
+		affect, err := res.RowsAffected()
+		if err == nil && affect != 0 {
+			log.Debugf("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER (%s, %s, %s, %s) success.", ApiProduct, AppId, EntityIdentifier, apid_scope)
+			return true
+		}
 	}
+	log.Errorf("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER (%s, %s, %s, %s) failed.", ApiProduct, AppId, EntityIdentifier, apid_scope, err)
+	return false
 }
diff --git a/listener_test.go b/listener_test.go
index a8da554..8305836 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -11,151 +11,387 @@
 
 var _ = Describe("listener", func() {
 
-	It("should store data from ApigeeSync in the database", func(done Done) {
+	Context("KMS create/updates verification via changes", func() {
+		It("Create KMS tables via changes, and Verify via verifyApiKey", func(done Done) {
+			var event = common.ChangeList{}
+			closed := 0
+			/* API Product */
+			srvItems := common.Row{
+				"id": {
+					Value: "ch_api_product_2",
+				},
+				"apid_resources": {
+					Value: "{}",
+				},
+				"environments": {
+					Value: "{Env_0, Env_1}",
+				},
+				"tenant_id": {
+					Value: "tenant_id_0",
+				},
+				"_change_selector": {
+					Value: "test_org0",
+				},
+			}
 
+			/* DEVELOPER */
+			devItems := common.Row{
+				"id": {
+					Value: "ch_developer_id_2",
+				},
+				"status": {
+					Value: "Active",
+				},
+				"tenant_id": {
+					Value: "tenant_id_0",
+				},
+				"_change_selector": {
+					Value: "test_org0",
+				},
+			}
+
+			/* APP */
+			appItems := common.Row{
+				"id": {
+					Value: "ch_application_id_2",
+				},
+				"developer_id": {
+					Value: "ch_developer_id_2",
+				},
+				"status": {
+					Value: "Approved",
+				},
+				"tenant_id": {
+					Value: "tenant_id_0",
+				},
+				"_change_selector": {
+					Value: "test_org0",
+				},
+			}
+
+			/* CRED */
+			credItems := common.Row{
+				"id": {
+					Value: "ch_app_credential_2",
+				},
+				"app_id": {
+					Value: "ch_application_id_2",
+				},
+				"tenant_id": {
+					Value: "tenant_id_0",
+				},
+				"status": {
+					Value: "Approved",
+				},
+				"_change_selector": {
+					Value: "test_org0",
+				},
+			}
+
+			/* APP_CRED_APIPRD_MAPPER */
+			mpItems := common.Row{
+				"apiprdt_id": {
+					Value: "ch_api_product_2",
+				},
+				"app_id": {
+					Value: "ch_application_id_2",
+				},
+				"appcred_id": {
+					Value: "ch_app_credential_2",
+				},
+				"status": {
+					Value: "Approved",
+				},
+				"_change_selector": {
+					Value: "test_org0",
+				},
+				"tenant_id": {
+					Value: "tenant_id_0",
+				},
+			}
+
+			event.Changes = []common.Change{
+				{
+					Table:     "kms.api_product",
+					NewRow:    srvItems,
+					Operation: 1,
+				},
+				{
+					Table:     "kms.developer",
+					NewRow:    devItems,
+					Operation: 1,
+				},
+				{
+					Table:     "kms.app",
+					NewRow:    appItems,
+					Operation: 1,
+				},
+				{
+					Table:     "kms.app_credential",
+					NewRow:    credItems,
+					Operation: 1,
+				},
+				{
+					Table:     "kms.app_credential_apiproduct_mapper",
+					NewRow:    mpItems,
+					Operation: 1,
+				},
+			}
+
+			h := &test_handler{
+				"checkDatabase post Insertion",
+				func(e apid.Event) {
+					defer GinkgoRecover()
+
+					// ignore the first event, let standard listener process it
+					changeSet := e.(*common.ChangeList)
+					if len(changeSet.Changes) > 0 || closed == 1 {
+						return
+					}
+					v := url.Values{
+						"key":       []string{"ch_app_credential_2"},
+						"uriPath":   []string{"/test"},
+						"scopeuuid": []string{"XYZ"},
+						"action":    []string{"verify"},
+					}
+					rsp, err := verifyAPIKey(v)
+					Expect(err).ShouldNot(HaveOccurred())
+					var respj kmsResponseSuccess
+					json.Unmarshal(rsp, &respj)
+					Expect(respj.Type).Should(Equal("APIKeyContext"))
+					Expect(respj.RspInfo.Key).Should(Equal("ch_app_credential_2"))
+					closed = 1
+					close(done)
+				},
+			}
+
+			apid.Events().Listen("ApigeeSync", h)
+			apid.Events().Emit("ApigeeSync", &event)
+			apid.Events().Emit("ApigeeSync", &common.ChangeList{})
+		})
+	})
+
+	It("Modify tables in KMS tables, and verify via verifyApiKey", func(done Done) {
+		closed := 0
 		var event = common.ChangeList{}
 		var event2 = common.ChangeList{}
 
+		/* Orig data */
 		/* API Product */
-		srvItems := common.Row{
+		srvItemsOld := common.Row{
 			"id": {
 				Value: "ch_api_product_0",
-				Type:  1,
 			},
 			"apid_resources": {
 				Value: "{}",
-				Type:  1,
 			},
 			"environments": {
 				Value: "{Env_0, Env_1}",
-				Type:  1,
 			},
 			"tenant_id": {
 				Value: "tenant_id_0",
-				Type:  1,
 			},
 			"_change_selector": {
 				Value: "test_org0",
-				Type:  1,
 			},
 		}
 
 		/* DEVELOPER */
-		devItems := common.Row{
+		devItemsOld := common.Row{
 			"id": {
 				Value: "ch_developer_id_0",
-				Type:  1,
 			},
 			"status": {
 				Value: "Active",
-				Type:  1,
 			},
 			"tenant_id": {
 				Value: "tenant_id_0",
-				Type:  1,
 			},
 			"_change_selector": {
 				Value: "test_org0",
-				Type:  1,
 			},
 		}
 
 		/* APP */
-		appItems := common.Row{
+		appItemsOld := common.Row{
 			"id": {
 				Value: "ch_application_id_0",
-				Type:  1,
 			},
 			"developer_id": {
 				Value: "ch_developer_id_0",
-				Type:  1,
 			},
 			"status": {
 				Value: "Approved",
-				Type:  1,
 			},
 			"tenant_id": {
 				Value: "tenant_id_0",
-				Type:  1,
 			},
 			"_change_selector": {
 				Value: "test_org0",
-				Type:  1,
 			},
 		}
 
 		/* CRED */
-		credItems := common.Row{
+		credItemsOld := common.Row{
 			"id": {
 				Value: "ch_app_credential_0",
-				Type:  1,
 			},
 			"app_id": {
 				Value: "ch_application_id_0",
-				Type:  1,
 			},
 			"tenant_id": {
 				Value: "tenant_id_0",
-				Type:  1,
 			},
 			"status": {
 				Value: "Approved",
-				Type:  1,
 			},
 			"_change_selector": {
 				Value: "test_org0",
-				Type:  1,
 			},
 		}
 
 		/* APP_CRED_APIPRD_MAPPER */
-		mpItems := common.Row{
+		mpItemsOld := common.Row{
 			"apiprdt_id": {
 				Value: "ch_api_product_0",
-				Type:  1,
 			},
 			"app_id": {
 				Value: "ch_application_id_0",
-				Type:  1,
 			},
 			"appcred_id": {
 				Value: "ch_app_credential_0",
-				Type:  1,
 			},
 			"status": {
 				Value: "Approved",
-				Type:  1,
 			},
 			"_change_selector": {
 				Value: "test_org0",
-				Type:  1,
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+		}
+
+		/* New to be replaced data */
+		/* API PRODUCT */
+		srvItemsNew := common.Row{
+			"id": {
+				Value: "ch_api_product_1",
+			},
+			"apid_resources": {
+				Value: "{}",
+			},
+			"environments": {
+				Value: "{Env_0, Env_1}",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+		}
+
+		/* DEVELOPER */
+		devItemsNew := common.Row{
+			"id": {
+				Value: "ch_developer_id_1",
+			},
+			"status": {
+				Value: "Active",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+		}
+
+		/* APP */
+		appItemsNew := common.Row{
+			"id": {
+				Value: "ch_application_id_1",
+			},
+			"developer_id": {
+				Value: "ch_developer_id_1",
+			},
+			"status": {
+				Value: "Approved",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+		}
+
+		/* CRED */
+		credItemsNew := common.Row{
+			"id": {
+				Value: "ch_app_credential_1",
+			},
+			"app_id": {
+				Value: "ch_application_id_1",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+			"status": {
+				Value: "Approved",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+		}
+
+		/* APP_CRED_APIPRD_MAPPER */
+		mpItemsNew := common.Row{
+			"apiprdt_id": {
+				Value: "ch_api_product_1",
+			},
+			"app_id": {
+				Value: "ch_application_id_1",
+			},
+			"appcred_id": {
+				Value: "ch_app_credential_1",
+			},
+			"status": {
+				Value: "Approved",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
 			},
 		}
 
 		event.Changes = []common.Change{
 			{
 				Table:     "kms.api_product",
-				NewRow:    srvItems,
+				NewRow:    srvItemsOld,
 				Operation: 1,
 			},
 			{
 				Table:     "kms.developer",
-				NewRow:    devItems,
+				NewRow:    devItemsOld,
 				Operation: 1,
 			},
 			{
 				Table:     "kms.app",
-				NewRow:    appItems,
+				NewRow:    appItemsOld,
 				Operation: 1,
 			},
 			{
 				Table:     "kms.app_credential",
-				NewRow:    credItems,
+				NewRow:    credItemsOld,
 				Operation: 1,
 			},
 			{
 				Table:     "kms.app_credential_apiproduct_mapper",
-				NewRow:    mpItems,
+				NewRow:    mpItemsOld,
 				Operation: 1,
 			},
 		}
@@ -163,30 +399,36 @@
 		event2.Changes = []common.Change{
 			{
 				Table:     "kms.api_product",
-				OldRow:    srvItems,
-				Operation: 3,
+				OldRow:    srvItemsOld,
+				NewRow:    srvItemsNew,
+				Operation: 2,
 			},
 			{
 				Table:     "kms.developer",
-				OldRow:    devItems,
-				Operation: 3,
+				OldRow:    devItemsOld,
+				NewRow:    devItemsNew,
+				Operation: 2,
 			},
 			{
 				Table:     "kms.app",
-				OldRow:    appItems,
-				Operation: 3,
+				OldRow:    appItemsOld,
+				NewRow:    appItemsNew,
+				Operation: 2,
 			},
 			{
 				Table:     "kms.app_credential",
-				OldRow:    credItems,
-				Operation: 3,
+				OldRow:    credItemsOld,
+				NewRow:    credItemsNew,
+				Operation: 2,
 			},
 			{
 				Table:     "kms.app_credential_apiproduct_mapper",
-				OldRow:    mpItems,
-				Operation: 3,
+				OldRow:    mpItemsOld,
+				NewRow:    mpItemsNew,
+				Operation: 2,
 			},
 		}
+
 		h := &test_handler{
 			"checkDatabase post Insertion",
 			func(e apid.Event) {
@@ -194,21 +436,22 @@
 
 				// ignore the first event, let standard listener process it
 				changeSet := e.(*common.ChangeList)
-				if len(changeSet.Changes) > 0 {
+				if len(changeSet.Changes) > 0 || closed == 1 {
 					return
 				}
 				v := url.Values{
-					"key": []string{"ch_app_credential_0"},
-					"uriPath": []string{"/test"},
+					"key":       []string{"ch_app_credential_1"},
+					"uriPath":   []string{"/test"},
 					"scopeuuid": []string{"XYZ"},
-					"action": []string{"verify"},
+					"action":    []string{"verify"},
 				}
 				rsp, err := verifyAPIKey(v)
 				Expect(err).ShouldNot(HaveOccurred())
 				var respj kmsResponseSuccess
 				json.Unmarshal(rsp, &respj)
 				Expect(respj.Type).Should(Equal("APIKeyContext"))
-				Expect(respj.RspInfo.Key).Should(Equal("ch_app_credential_0"))
+				Expect(respj.RspInfo.Key).Should(Equal("ch_app_credential_1"))
+				closed = 1
 				close(done)
 			},
 		}
@@ -216,7 +459,6 @@
 		apid.Events().Listen("ApigeeSync", h)
 		apid.Events().Emit("ApigeeSync", &event)
 		apid.Events().Emit("ApigeeSync", &event2)
-		apid.Events().Emit("ApigeeSync", &event)
 		apid.Events().Emit("ApigeeSync", &common.ChangeList{})
 	})
 
@@ -234,3 +476,29 @@
 func (t *test_handler) Handle(event apid.Event) {
 	t.f(event)
 }
+
+func addScopes(db apid.DB) {
+	txn, _ := db.Begin()
+	txn.Exec("INSERT INTO DATA_SCOPE (id, _change_selector, apid_cluster_id, scope, org, env) "+
+		"VALUES"+
+		"($1,$2,$3,$4,$5,$6)",
+		"ABCDE",
+		"some_cluster_id",
+		"some_cluster_id",
+		"tenant_id_xxxx",
+		"test_org0",
+		"Env_0",
+	)
+	txn.Exec("INSERT INTO DATA_SCOPE (id, _change_selector, apid_cluster_id, scope, org, env) "+
+		"VALUES"+
+		"($1,$2,$3,$4,$5,$6)",
+		"XYZ",
+		"test_org0",
+		"somecluster_id",
+		"tenant_id_0",
+		"test_org0",
+		"Env_0",
+	)
+	log.Info("Inserted DATA_SCOPE for test")
+	txn.Commit()
+}
diff --git a/verifyAPIKey_suite_test.go b/verifyAPIKey_suite_test.go
index 870a376..a5e5b39 100644
--- a/verifyAPIKey_suite_test.go
+++ b/verifyAPIKey_suite_test.go
@@ -4,15 +4,13 @@
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
 
-	"testing"
 	"github.com/30x/apid"
 	"github.com/30x/apid/factory"
 	"io/ioutil"
-	"net/http/httptest"
 	"net/http"
+	"net/http/httptest"
 	"os"
-	"strconv"
-	"github.com/apigee-labs/transicator/common"
+	"testing"
 )
 
 var (
@@ -38,7 +36,7 @@
 	setDB(db)
 	createTables(db)
 	createApidClusterTables(db)
-	insertTestData(db)
+	addScopes(db)
 	testServer = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 		if req.URL.Path == apiPath {
 			handleRequest(w, req)
@@ -58,259 +56,3 @@
 	RegisterFailHandler(Fail)
 	RunSpecs(t, "VerifyAPIKey Suite")
 }
-
-func insertTestData(db apid.DB) {
-
-	txn, err := db.Begin()
-	Expect(err).ShouldNot(HaveOccurred())
-
-	for i := 0; i < 10; i++ {
-		var rows []common.Row
-		srvItems := common.Row{}
-		result := strconv.FormatInt(int64(i), 10)
-
-		scv := &common.ColumnVal{
-			Value: "api_product_" + result,
-			Type:  1,
-		}
-		srvItems["id"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "{/**, /test}",
-			Type:  1,
-		}
-		srvItems["api_resources"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "{Env_0, Env_1}",
-			Type:  1,
-		}
-		srvItems["environments"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "Org_0",
-			Type:  1,
-		}
-		srvItems["_change_selector"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "tenant_id_xxxx",
-			Type:  1,
-		}
-		srvItems["tenant_id"] = scv
-		rows = append(rows, srvItems)
-		res := insertAPIproducts(rows, txn)
-		Expect(res).Should(BeTrue())
-	}
-
-	for i := 0; i < 10; i++ {
-		var rows []common.Row
-		srvItems := common.Row{}
-		result := strconv.FormatInt(int64(i), 10)
-
-		scv := &common.ColumnVal{
-			Value: "developer_id_" + result,
-			Type:  1,
-		}
-		srvItems["id"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "test@apigee.com",
-			Type:  1,
-		}
-		srvItems["email"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "Active",
-			Type:  1,
-		}
-		srvItems["status"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "Apigee",
-			Type:  1,
-		}
-		srvItems["firstName"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "Google",
-			Type:  1,
-		}
-		srvItems["lastName"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "Org_0",
-			Type:  1,
-		}
-		srvItems["_change_selector"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "tenant_id_xxxx",
-			Type:  1,
-		}
-		srvItems["tenant_id"] = scv
-
-		rows = append(rows, srvItems)
-		res := insertDevelopers(rows, txn)
-		Expect(res).Should(BeTrue())
-	}
-
-	var j, k int
-	for i := 0; i < 10; i++ {
-		resulti := strconv.FormatInt(int64(i), 10)
-		for j = k; j < 10 + k; j++ {
-			var rows []common.Row
-
-			srvItems := common.Row{}
-			resultj := strconv.FormatInt(int64(j), 10)
-
-			scv := &common.ColumnVal{
-				Value: "application_id_" + resultj,
-				Type:  1,
-			}
-			srvItems["id"] = scv
-
-			scv = &common.ColumnVal{
-				Value: "developer_id_" + resulti,
-				Type:  1,
-			}
-			srvItems["developer_id"] = scv
-
-			scv = &common.ColumnVal{
-				Value: "approved",
-				Type:  1,
-			}
-			srvItems["status"] = scv
-
-			scv = &common.ColumnVal{
-				Value: "http://apigee.com",
-				Type:  1,
-			}
-			srvItems["callback_url"] = scv
-
-			scv = &common.ColumnVal{
-				Value: "Org_0",
-				Type:  1,
-			}
-			srvItems["_change_selector"] = scv
-
-			scv = &common.ColumnVal{
-				Value: "tenant_id_xxxx",
-				Type:  1,
-			}
-			srvItems["tenant_id"] = scv
-			rows = append(rows, srvItems)
-			res := insertApplications(rows, txn)
-			Expect(res).Should(BeTrue())
-		}
-		k = j
-	}
-
-	for i := 0; i < 10; i++ {
-		var rows []common.Row
-		srvItems := common.Row{}
-		result := strconv.FormatInt(int64(i), 10)
-
-		scv := &common.ColumnVal{
-			Value: "app_credential_" + result,
-			Type:  1,
-		}
-		srvItems["id"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "application_id_" + result,
-			Type:  1,
-		}
-		srvItems["app_id"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "approved",
-			Type:  1,
-		}
-		srvItems["status"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "Org_0",
-			Type:  1,
-		}
-		srvItems["_change_selector"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "tenant_id_xxxx",
-			Type:  1,
-		}
-		srvItems["tenant_id"] = scv
-		rows = append(rows, srvItems)
-		res := insertCredentials(rows, txn)
-		Expect(res).Should(BeTrue())
-	}
-
-	for i := 0; i < 10; i++ {
-		var rows []common.Row
-		srvItems := common.Row{}
-		result := strconv.FormatInt(int64(i), 10)
-
-		scv := &common.ColumnVal{
-			Value: "api_product_" + result,
-			Type:  1,
-		}
-		srvItems["apiprdt_id"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "application_id_" + result,
-			Type:  1,
-		}
-		srvItems["app_id"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "app_credential_" + result,
-			Type:  1,
-		}
-		srvItems["appcred_id"] = scv
-		scv = &common.ColumnVal{
-			Value: "approved",
-			Type:  1,
-		}
-		srvItems["status"] = scv
-		scv = &common.ColumnVal{
-			Value: "Org_0",
-			Type:  1,
-		}
-		srvItems["_change_selector"] = scv
-
-		scv = &common.ColumnVal{
-			Value: "tenant_id_xxxx",
-			Type:  1,
-		}
-		srvItems["tenant_id"] = scv
-		rows = append(rows, srvItems)
-		res := insertAPIProductMappers(rows, txn)
-		Expect(res).Should(BeTrue())
-	}
-	txn.Exec("INSERT INTO DATA_SCOPE (id, _change_selector, apid_cluster_id, scope, org, env) " +
-		"VALUES" +
-		"($1,$2,$3,$4,$5,$6)",
-		"ABCDE",
-		"some_cluster_id",
-		"some_cluster_id",
-		"tenant_id_xxxx",
-		"test_org0",
-		"Env_0",
-	);
-	txn.Exec("INSERT INTO DATA_SCOPE (id, _change_selector, apid_cluster_id, scope, org, env) " +
-		"VALUES" +
-		"($1,$2,$3,$4,$5,$6)",
-		"XYZ",
-		"test_org0",
-		"somecluster_id",
-		"tenant_id_0",
-		"test_org0",
-		"Env_0",
-	);
-	log.Info("Inserted DATA_SCOPE for test")
-	txn.Commit()
-	var count int64
-	db.QueryRow("select count(*) from data_scope").Scan(&count);
-	log.Info("Found ", count)
-
-}