[ISSUE-67901957] add api tests
diff --git a/accessEntity/accessEntity_suite_test.go b/accessEntity/accessEntity_suite_test.go
index f8a1ed1..6b56049 100644
--- a/accessEntity/accessEntity_suite_test.go
+++ b/accessEntity/accessEntity_suite_test.go
@@ -22,6 +22,7 @@
 	"github.com/apid/apidVerifyApiKey/common"
 	"os"
 	"testing"
+	"time"
 )
 
 const testTempDirBase = "./tmp/"
@@ -30,13 +31,20 @@
 	testTempDir string
 )
 
-var _ = BeforeSuite(func() {
-	_ = os.MkdirAll(testTempDirBase, os.ModePerm)
-	s := factory.DefaultServicesFactory()
-	apid.Initialize(s)
+func initSetup(s apid.Services) (apid.PluginData, error) {
 	SetApidServices(s, apid.Log())
 	common.SetApidServices(s, s.Log())
-})
+	return common.PluginData, nil
+}
+
+var _ = BeforeSuite(func() {
+	apid.RegisterPlugin(initSetup, common.PluginData)
+	_ = os.MkdirAll(testTempDirBase, os.ModePerm)
+	apid.Initialize(factory.DefaultServicesFactory())
+	apid.InitializePlugins("0.0.0")
+	go services.API().Listen()
+	time.Sleep(time.Second)
+}, 2)
 
 var _ = AfterSuite(func() {
 	apid.Events().Close()
@@ -45,5 +53,5 @@
 
 func TestVerifyAPIKey(t *testing.T) {
 	RegisterFailHandler(Fail)
-	RunSpecs(t, "VerifyAPIKey Suite")
+	RunSpecs(t, "AccessEntity Suite")
 }
diff --git a/accessEntity/api.go b/accessEntity/api.go
index bc40910..4c3aa65 100644
--- a/accessEntity/api.go
+++ b/accessEntity/api.go
@@ -42,6 +42,7 @@
 	IdentifierDeveloperEmail = "developeremail"
 	IdentifierConsumerKey    = "consumerkey"
 	IdentifierCompanyName    = "companyname"
+	IdentifierOrganization   = "organization"
 )
 
 const (
@@ -230,7 +231,7 @@
 
 func extractIdentifiers(pars map[string][]string) (map[string]string, string, error) {
 	m := make(map[string]string)
-	orgs := pars["organization"]
+	orgs := pars[IdentifierOrganization]
 	if len(orgs) == 0 {
 		return nil, "", fmt.Errorf("no org specified")
 	}
@@ -249,7 +250,7 @@
 }
 
 func (a *ApiManager) getCompanyDeveloper(org string, ids map[string]string) (*CompanyDevelopersSuccessResponse, *common.ErrorResponse) {
-	valid, keyVals := parseIdentifiers(EndpointDeveloper, ids)
+	valid, keyVals := parseIdentifiers(EndpointCompanyDeveloper, ids)
 	if !valid {
 		return nil, ErrInvalidPar
 	}
diff --git a/accessEntity/api_test.go b/accessEntity/api_test.go
new file mode 100644
index 0000000..f406e38
--- /dev/null
+++ b/accessEntity/api_test.go
@@ -0,0 +1,708 @@
+// Copyright 2017 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package accessEntity
+
+import (
+	"encoding/json"
+	"github.com/apid/apidVerifyApiKey/common"
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
+	"io/ioutil"
+	"net/http"
+	"net/url"
+	"strconv"
+	"time"
+)
+
+const (
+	apiTestUrl = "http://127.0.0.1:9000"
+)
+
+var _ = Describe("API Tests", func() {
+	var apiMan *ApiManager
+	testCount := 0
+	client := &http.Client{}
+	dbMan := &DummyDbMan{}
+	var attrs []common.Attribute
+	var testId string
+	clientGet := func(path string, pars map[string][]string) (int, []byte) {
+		uri, err := url.Parse(apiTestUrl + path)
+		Expect(err).Should(Succeed())
+		query := url.Values(pars)
+		uri.RawQuery = query.Encode()
+		httpReq, err := http.NewRequest("GET", uri.String(), nil)
+		Expect(err).Should(Succeed())
+		res, err := client.Do(httpReq)
+		Expect(err).Should(Succeed())
+		defer res.Body.Close()
+		responseBody, err := ioutil.ReadAll(res.Body)
+		Expect(err).Should(Succeed())
+		return res.StatusCode, responseBody
+	}
+
+	BeforeEach(func() {
+		testCount++
+		testId = "test-" + strconv.Itoa(testCount)
+		apiMan = &ApiManager{
+			DbMan:            dbMan,
+			AccessEntityPath: AccessEntityPath + strconv.Itoa(testCount),
+			apiInitialized:   false,
+		}
+		attrs = setAttrs(dbMan, testId)
+		apiMan.InitAPI()
+		time.Sleep(100 * time.Millisecond)
+	})
+
+	It("ApiProduct", func() {
+		testProd := []common.ApiProduct{
+			{
+				Id:            testId,
+				Name:          "apstest",
+				DisplayName:   "apstest",
+				Description:   "",
+				ApiResources:  "{/**}",
+				ApprovalType:  "AUTO",
+				Scopes:        `{foo,bar}`,
+				Proxies:       `{aps,perfBenchmark}`,
+				Environments:  `{prod,test}`,
+				Quota:         "10000000",
+				QuotaTimeUnit: "MINUTE",
+				QuotaInterval: 1,
+				CreatedAt:     "2017-08-18 22:12:49.363+00:00",
+				CreatedBy:     "haoming@apid.git",
+				UpdatedAt:     "2017-08-18 22:26:50.153+00:00",
+				UpdatedBy:     "haoming@apid.git",
+				TenantId:      "515211e9",
+			},
+		}
+
+		expected := ApiProductSuccessResponse{
+			ApiProduct: &ApiProductDetails{
+				ApiProxies:     []string{"aps", "perfBenchmark"},
+				ApiResources:   []string{"/**"},
+				ApprovalType:   testProd[0].ApprovalType,
+				Attributes:     attrs,
+				CreatedAt:      testProd[0].CreatedAt,
+				CreatedBy:      testProd[0].CreatedBy,
+				Description:    testProd[0].Description,
+				DisplayName:    testProd[0].DisplayName,
+				Environments:   []string{"prod", "test"},
+				ID:             testProd[0].Id,
+				LastModifiedAt: testProd[0].UpdatedAt,
+				LastModifiedBy: testProd[0].UpdatedBy,
+				Name:           testProd[0].Name,
+				QuotaInterval:  testProd[0].QuotaInterval,
+				QuotaLimit:     10000000,
+				QuotaTimeUnit:  testProd[0].QuotaTimeUnit,
+				Scopes:         []string{"foo", "bar"},
+			},
+			Organization:             "test-org",
+			PrimaryIdentifierType:    IdentifierAppName,
+			PrimaryIdentifierValue:   "test-app",
+			SecondaryIdentifierType:  IdentifierDeveloperId,
+			SecondaryIdentifierValue: "test-dev",
+		}
+
+		testData := [][]common.ApiProduct{
+			testProd,
+			nil,
+			testProd,
+			testProd,
+		}
+
+		testPars := []map[string][]string{
+			// positive
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierAppName:      {"test-app"},
+				IdentifierDeveloperId:  {"test-dev"},
+			},
+			// negative
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierAppName:      {"test-app"},
+				IdentifierDeveloperId:  {"test-dev"},
+			},
+			{
+				IdentifierAppName:     {"test-app"},
+				IdentifierDeveloperId: {"test-dev"},
+			},
+			{
+				IdentifierDeveloperId: {"test-dev"},
+			},
+		}
+
+		results := [][]interface{}{
+			{http.StatusOK, expected},
+			{http.StatusNotFound, nil},
+			{http.StatusBadRequest, nil},
+			{http.StatusBadRequest, nil},
+		}
+
+		for i, data := range testData {
+			dbMan.apiProducts = data
+			code, body := clientGet(apiMan.AccessEntityPath+EndpointApiProduct, testPars[i])
+			Expect(code).Should(Equal(results[i][0]))
+			if results[i][1] != nil {
+				var res ApiProductSuccessResponse
+				Expect(json.Unmarshal(body, &res)).Should(Succeed())
+				Expect(res).Should(Equal(results[i][1]))
+			}
+		}
+
+	})
+
+	It("Apps", func() {
+		testApp := []common.App{
+			{
+				Id:          testId,
+				TenantId:    "515211e9",
+				Name:        "apstest",
+				DisplayName: "apstest",
+				AccessType:  "READ",
+				CallbackUrl: "https://www.google.com",
+				Status:      "APPROVED",
+				AppFamily:   "default",
+				CompanyId:   "",
+				DeveloperId: "e41f04e8-9d3f-470a-8bfd-c7939945896c",
+				ParentId:    "e41f04e8-9d3f-470a-8bfd-c7939945896c",
+				Type:        "DEVELOPER",
+				CreatedAt:   "2017-08-18 22:13:18.325+00:00",
+				CreatedBy:   "haoming@apid.git",
+				UpdatedAt:   "2017-08-18 22:13:18.325+00:00",
+				UpdatedBy:   "haoming@apid.git",
+			},
+		}
+
+		testProductNames := []string{"foo", "bar"}
+		testStatus := "test-status"
+		testCreds := []common.AppCredential{
+			{
+				Id:             testId,
+				TenantId:       "515211e9",
+				ConsumerSecret: "secret1",
+				AppId:          testId,
+				MethodType:     "GET",
+				Status:         "APPROVED",
+				IssuedAt:       "2017-08-18 22:13:18.35+00:00",
+				ExpiresAt:      "2018-08-18 22:13:18.35+00:00",
+				AppStatus:      "APPROVED",
+				Scopes:         "{foo,bar}",
+				CreatedAt:      "2017-08-18 22:13:18.35+00:00",
+				CreatedBy:      "-NA-",
+				UpdatedAt:      "2017-08-18 22:13:18.352+00:00",
+				UpdatedBy:      "-NA-",
+			},
+		}
+		expected := AppSuccessResponse{
+			App: &AppDetails{
+				AccessType:  testApp[0].AccessType,
+				ApiProducts: testProductNames,
+				AppCredentials: []*CredentialDetails{
+					{
+						ApiProductReferences: testProductNames,
+						AppID:                testCreds[0].AppId,
+						AppStatus:            testApp[0].Status,
+						Attributes:           attrs,
+						ConsumerKey:          testCreds[0].Id,
+						ConsumerSecret:       testCreds[0].ConsumerSecret,
+						ExpiresAt:            testCreds[0].ExpiresAt,
+						IssuedAt:             testCreds[0].IssuedAt,
+						MethodType:           testCreds[0].MethodType,
+						Scopes:               []string{"foo", "bar"},
+						Status:               testCreds[0].Status,
+					},
+				},
+				AppFamily:       testApp[0].AppFamily,
+				AppParentID:     testApp[0].ParentId,
+				AppParentStatus: testStatus,
+				AppType:         testApp[0].Type,
+				Attributes:      attrs,
+				CallbackUrl:     testApp[0].CallbackUrl,
+				CreatedAt:       testApp[0].CreatedAt,
+				CreatedBy:       testApp[0].CreatedBy,
+				DisplayName:     testApp[0].DisplayName,
+				Id:              testApp[0].Id,
+				KeyExpiresIn:    "", //TODO
+				LastModifiedAt:  testApp[0].UpdatedAt,
+				LastModifiedBy:  testApp[0].UpdatedBy,
+				Name:            testApp[0].Name,
+				Scopes:          []string{}, //TODO
+				Status:          testApp[0].Status,
+			},
+			Organization:             "test-org",
+			PrimaryIdentifierType:    IdentifierAppName,
+			PrimaryIdentifierValue:   "test-app",
+			SecondaryIdentifierType:  IdentifierDeveloperId,
+			SecondaryIdentifierValue: "test-dev",
+		}
+
+		testData := [][]common.App{
+			testApp,
+			nil,
+			testApp,
+			testApp,
+		}
+
+		testPars := []map[string][]string{
+			// positive
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierAppName:      {"test-app"},
+				IdentifierDeveloperId:  {"test-dev"},
+			},
+			// negative
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierAppName:      {"test-app"},
+				IdentifierDeveloperId:  {"test-dev"},
+			},
+			{
+				IdentifierAppName:     {"test-app"},
+				IdentifierDeveloperId: {"test-dev"},
+			},
+			{
+				IdentifierDeveloperId: {"test-dev"},
+			},
+		}
+
+		results := [][]interface{}{
+			{http.StatusOK, expected},
+			{http.StatusNotFound, nil},
+			{http.StatusBadRequest, nil},
+			{http.StatusBadRequest, nil},
+		}
+
+		dbMan.apiProductNames = testProductNames
+		dbMan.status = testStatus
+		dbMan.appCredentials = testCreds
+		for i, data := range testData {
+			dbMan.apps = data
+			code, body := clientGet(apiMan.AccessEntityPath+EndpointApp, testPars[i])
+			Expect(code).Should(Equal(results[i][0]))
+			if results[i][1] != nil {
+				var res AppSuccessResponse
+				Expect(json.Unmarshal(body, &res)).Should(Succeed())
+				Expect(res).Should(Equal(results[i][1]))
+			}
+		}
+
+	})
+
+	It("Company", func() {
+		testCom := []common.Company{
+			{
+				Id:          testId,
+				TenantId:    "515211e9",
+				Name:        "testcompanyhflxv",
+				DisplayName: "testcompanyhflxv",
+				Status:      "ACTIVE",
+				CreatedAt:   "2017-11-02 16:00:16.287+00:00",
+				CreatedBy:   "haoming@apid.git",
+				UpdatedAt:   "2017-11-02 16:00:16.287+00:00",
+				UpdatedBy:   "haoming@apid.git",
+			},
+		}
+
+		testAppNames := []string{"foo", "bar"}
+
+		expected := CompanySuccessResponse{
+			Company: &CompanyDetails{
+				Apps:           testAppNames,
+				Attributes:     attrs,
+				CreatedAt:      testCom[0].CreatedAt,
+				CreatedBy:      testCom[0].CreatedBy,
+				DisplayName:    testCom[0].DisplayName,
+				ID:             testCom[0].Id,
+				LastModifiedAt: testCom[0].UpdatedAt,
+				LastModifiedBy: testCom[0].UpdatedBy,
+				Name:           testCom[0].Name,
+				Status:         testCom[0].Status,
+			},
+			Organization:           "test-org",
+			PrimaryIdentifierType:  IdentifierAppId,
+			PrimaryIdentifierValue: "test-app",
+		}
+
+		testData := [][]common.Company{
+			testCom,
+			nil,
+			testCom,
+			testCom,
+		}
+
+		testPars := []map[string][]string{
+			// positive
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierAppId:        {"test-app"},
+			},
+			// negative
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierAppId:        {"test-app"},
+			},
+			{
+				IdentifierAppId: {"test-app"},
+			},
+			{
+				IdentifierDeveloperId: {"test-dev"},
+			},
+		}
+
+		results := [][]interface{}{
+			{http.StatusOK, expected},
+			{http.StatusNotFound, nil},
+			{http.StatusBadRequest, nil},
+			{http.StatusBadRequest, nil},
+		}
+
+		dbMan.appNames = testAppNames
+
+		for i, data := range testData {
+			dbMan.companies = data
+			code, body := clientGet(apiMan.AccessEntityPath+EndpointCompany, testPars[i])
+			Expect(code).Should(Equal(results[i][0]))
+			if results[i][1] != nil {
+				var res CompanySuccessResponse
+				Expect(json.Unmarshal(body, &res)).Should(Succeed())
+				Expect(res).Should(Equal(results[i][1]))
+			}
+		}
+
+	})
+
+	It("Developer", func() {
+		testDev := []common.Developer{
+			{
+				Id:                testId,
+				TenantId:          "515211e9",
+				UserName:          "haoming",
+				FirstName:         "haoming",
+				LastName:          "zhang",
+				Password:          "111",
+				Email:             "bar@google.com",
+				Status:            "ACTIVE",
+				EncryptedPassword: "222",
+				Salt:              "333",
+				CreatedAt:         "2017-08-16 22:39:46.669+00:00",
+				CreatedBy:         "foo@google.com",
+				UpdatedAt:         "2017-08-16 22:39:46.669+00:00",
+				UpdatedBy:         "foo@google.com",
+			},
+		}
+
+		testAppNames := []string{"foo", "bar"}
+		testComNames := []string{"foo", "bar"}
+
+		expected := DeveloperSuccessResponse{
+			Developer: &DeveloperDetails{
+				Apps:           testAppNames,
+				Attributes:     attrs,
+				Companies:      testComNames,
+				CreatedAt:      testDev[0].CreatedAt,
+				CreatedBy:      testDev[0].CreatedBy,
+				Email:          testDev[0].Email,
+				FirstName:      testDev[0].FirstName,
+				ID:             testDev[0].Id,
+				LastModifiedAt: testDev[0].UpdatedAt,
+				LastModifiedBy: testDev[0].UpdatedBy,
+				LastName:       testDev[0].LastName,
+				Password:       testDev[0].Password,
+				Status:         testDev[0].Status,
+				UserName:       testDev[0].UserName,
+			},
+			Organization:           "test-org",
+			PrimaryIdentifierType:  IdentifierAppId,
+			PrimaryIdentifierValue: "test-app",
+		}
+
+		testData := [][]common.Developer{
+			testDev,
+			nil,
+			testDev,
+			testDev,
+		}
+
+		testPars := []map[string][]string{
+			// positive
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierAppId:        {"test-app"},
+			},
+			// negative
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierAppId:        {"test-app"},
+			},
+			{
+				IdentifierAppId: {"test-app"},
+			},
+			{
+				IdentifierDeveloperId: {"test-dev"},
+			},
+		}
+
+		results := [][]interface{}{
+			{http.StatusOK, expected},
+			{http.StatusNotFound, nil},
+			{http.StatusBadRequest, nil},
+			{http.StatusBadRequest, nil},
+		}
+
+		dbMan.appNames = testAppNames
+		dbMan.comNames = testComNames
+
+		for i, data := range testData {
+			dbMan.developers = data
+			code, body := clientGet(apiMan.AccessEntityPath+EndpointDeveloper, testPars[i])
+			Expect(code).Should(Equal(results[i][0]))
+			if results[i][1] != nil {
+				var res DeveloperSuccessResponse
+				Expect(json.Unmarshal(body, &res)).Should(Succeed())
+				Expect(res).Should(Equal(results[i][1]))
+			}
+		}
+
+	})
+
+	It("AppCredential", func() {
+		testAppCred := []common.AppCredential{
+			{
+				Id:             testId,
+				TenantId:       "515211e9",
+				ConsumerSecret: "secret1",
+				AppId:          testId,
+				MethodType:     "GET",
+				Status:         "APPROVED",
+				IssuedAt:       "2017-08-18 22:13:18.35+00:00",
+				ExpiresAt:      "2018-08-18 22:13:18.35+00:00",
+				AppStatus:      "APPROVED",
+				Scopes:         "{foo,bar}",
+				CreatedAt:      "2017-08-18 22:13:18.35+00:00",
+				CreatedBy:      "-NA-",
+				UpdatedAt:      "2017-08-18 22:13:18.352+00:00",
+				UpdatedBy:      "-NA-",
+			},
+		}
+		testApp := []common.App{
+			{
+				Id:          testId,
+				TenantId:    "515211e9",
+				Name:        "apstest",
+				DisplayName: "apstest",
+				AccessType:  "READ",
+				CallbackUrl: "https://www.google.com",
+				Status:      "APPROVED",
+				AppFamily:   "default",
+				CompanyId:   "",
+				DeveloperId: "e41f04e8-9d3f-470a-8bfd-c7939945896c",
+				ParentId:    "e41f04e8-9d3f-470a-8bfd-c7939945896c",
+				Type:        "DEVELOPER",
+				CreatedAt:   "2017-08-18 22:13:18.325+00:00",
+				CreatedBy:   "haoming@apid.git",
+				UpdatedAt:   "2017-08-18 22:13:18.325+00:00",
+				UpdatedBy:   "haoming@apid.git",
+			},
+		}
+
+		testProductNames := []string{"foo", "bar"}
+		testStatus := "test-status"
+
+		expected := AppCredentialSuccessResponse{
+			AppCredential: &AppCredentialDetails{
+				AppID:       testAppCred[0].AppId,
+				AppName:     testApp[0].Name,
+				Attributes:  attrs,
+				ConsumerKey: testAppCred[0].Id,
+				ConsumerKeyStatus: &ConsumerKeyStatusDetails{
+					AppCredential: &CredentialDetails{
+						ApiProductReferences: testProductNames,
+						AppID:                testAppCred[0].AppId,
+						AppStatus:            testApp[0].Status,
+						Attributes:           attrs,
+						ConsumerKey:          testAppCred[0].Id,
+						ConsumerSecret:       testAppCred[0].ConsumerSecret,
+						ExpiresAt:            testAppCred[0].ExpiresAt,
+						IssuedAt:             testAppCred[0].IssuedAt,
+						MethodType:           testAppCred[0].MethodType,
+						Scopes:               []string{"foo", "bar"},
+						Status:               testAppCred[0].Status,
+					},
+					AppID:           testAppCred[0].AppId,
+					AppName:         testApp[0].Name,
+					AppStatus:       testApp[0].Status,
+					AppType:         testApp[0].Type,
+					DeveloperID:     testApp[0].DeveloperId,
+					DeveloperStatus: testStatus,
+					IsValidKey:      true,
+				},
+				ConsumerSecret: testAppCred[0].ConsumerSecret,
+				DeveloperID:    testApp[0].DeveloperId,
+				RedirectUris:   []string{testApp[0].CallbackUrl}, //TODO
+				Scopes:         []string{"foo", "bar"},
+				Status:         testAppCred[0].Status,
+			},
+			Organization:           "test-org",
+			PrimaryIdentifierType:  IdentifierConsumerKey,
+			PrimaryIdentifierValue: "test-key",
+		}
+
+		testData := [][]common.AppCredential{
+			testAppCred,
+			nil,
+			testAppCred,
+			testAppCred,
+		}
+
+		testPars := []map[string][]string{
+			// positive
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierConsumerKey:  {"test-key"},
+			},
+			// negative
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierConsumerKey:  {"test-key"},
+			},
+			{
+				IdentifierConsumerKey: {"test-key"},
+			},
+			{
+				IdentifierDeveloperId: {"test-dev"},
+			},
+		}
+
+		results := [][]interface{}{
+			{http.StatusOK, expected},
+			{http.StatusNotFound, nil},
+			{http.StatusBadRequest, nil},
+			{http.StatusBadRequest, nil},
+		}
+
+		dbMan.apiProductNames = testProductNames
+		dbMan.status = testStatus
+		dbMan.apps = testApp
+		for i, data := range testData {
+			dbMan.appCredentials = data
+			code, body := clientGet(apiMan.AccessEntityPath+EndpointAppCredentials, testPars[i])
+			Expect(code).Should(Equal(results[i][0]))
+			if results[i][1] != nil {
+				var res AppCredentialSuccessResponse
+				Expect(json.Unmarshal(body, &res)).Should(Succeed())
+				Expect(res).Should(Equal(results[i][1]))
+			}
+		}
+	})
+
+	It("CompanyDeveloper", func() {
+		testDev := []common.CompanyDeveloper{
+			{
+				TenantId:    "515211e9",
+				CompanyId:   "a94f75e2-69b0-44af-8776-155df7c7d22e",
+				DeveloperId: "590f33bf-f05c-48c1-bb93-183759bd9ee1",
+				Roles:       "{foo,bar}",
+				CreatedAt:   "2017-11-02 16:00:16.287+00:00",
+				CreatedBy:   "haoming@apid.git",
+				UpdatedAt:   "2017-11-02 16:00:16.287+00:00",
+				UpdatedBy:   "haoming@apid.git",
+			},
+		}
+
+		testComNames := []string{"foo"}
+		testEmail := "haoming@apid.git"
+
+		expected := CompanyDevelopersSuccessResponse{
+			CompanyDevelopers: []*CompanyDeveloperDetails{
+				{
+					CompanyName:    testComNames[0],
+					CreatedAt:      testDev[0].CreatedAt,
+					CreatedBy:      testDev[0].CreatedBy,
+					DeveloperEmail: testEmail,
+					LastModifiedAt: testDev[0].UpdatedAt,
+					LastModifiedBy: testDev[0].UpdatedBy,
+					Roles:          []string{"foo", "bar"},
+				},
+			},
+			Organization:           "test-org",
+			PrimaryIdentifierType:  IdentifierCompanyName,
+			PrimaryIdentifierValue: "test-com",
+		}
+
+		testData := [][]common.CompanyDeveloper{
+			testDev,
+			nil,
+			testDev,
+			testDev,
+		}
+
+		testPars := []map[string][]string{
+			// positive
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierCompanyName:  {"test-com"},
+			},
+			// negative
+			{
+				IdentifierOrganization: {"test-org"},
+				IdentifierCompanyName:  {"test-com"},
+			},
+			{
+				IdentifierCompanyName: {"test-com"},
+			},
+			{
+				IdentifierDeveloperId: {"test-dev"},
+			},
+		}
+
+		results := [][]interface{}{
+			{http.StatusOK, expected},
+			{http.StatusNotFound, nil},
+			{http.StatusBadRequest, nil},
+			{http.StatusBadRequest, nil},
+		}
+
+		dbMan.comNames = testComNames
+		dbMan.email = testEmail
+
+		for i, data := range testData {
+			dbMan.companyDevelopers = data
+			code, body := clientGet(apiMan.AccessEntityPath+EndpointCompanyDeveloper, testPars[i])
+			Expect(code).Should(Equal(results[i][0]))
+			if results[i][1] != nil {
+				var res CompanyDevelopersSuccessResponse
+				Expect(json.Unmarshal(body, &res)).Should(Succeed())
+				Expect(res).Should(Equal(results[i][1]))
+			}
+		}
+
+	})
+})
+
+func setAttrs(dbMan *DummyDbMan, id string) []common.Attribute {
+	dbMan.attrs = map[string][]common.Attribute{
+		id: {
+			{
+				Name:  "foo",
+				Value: "bar",
+			},
+			{
+				Name:  "bar",
+				Value: "foo",
+			},
+		},
+	}
+	return dbMan.attrs[id]
+}
diff --git a/accessEntity/data_test.go b/accessEntity/data_test.go
index 914b7e1..59d1823 100644
--- a/accessEntity/data_test.go
+++ b/accessEntity/data_test.go
@@ -344,10 +344,11 @@
 				testData := [][]string{
 					// positive tests
 					{IdentifierConsumerKey, "abcd", "", "", "apid-haoming"},
-
+					{IdentifierAppId, "408ad853-3fa0-402f-90ee-103de98d71a5", "", "", "apid-haoming"},
 					// negative tests
 					{IdentifierConsumerKey, "abcd", "", "", "non-existent"},
 					{IdentifierConsumerKey, "non-existent", "", "", "apid-haoming"},
+					{IdentifierAppId, "non-existent", "", "", "apid-haoming"},
 				}
 
 				var expectedCred = common.AppCredential{
@@ -369,6 +370,8 @@
 
 				results := [][]common.AppCredential{
 					{expectedCred},
+					{expectedCred},
+					nil,
 					nil,
 					nil,
 				}
@@ -481,7 +484,6 @@
 	bytes, err := ioutil.ReadFile(fileDataTest)
 	Expect(err).Should(Succeed())
 	query := string(bytes)
-	log.Debug(query)
 	_, err = db.Exec(query)
 	Expect(err).Should(Succeed())
 }
diff --git a/accessEntity/mock_test.go b/accessEntity/mock_test.go
index ff22487..18a9bbc 100644
--- a/accessEntity/mock_test.go
+++ b/accessEntity/mock_test.go
@@ -13,7 +13,9 @@
 // limitations under the License.
 package accessEntity
 
-import "github.com/apid/apidVerifyApiKey/common"
+import (
+	"github.com/apid/apidVerifyApiKey/common"
+)
 
 type DummyDbMan struct {
 	apiProducts       []common.ApiProduct
diff --git a/pluginData.go b/common/pluginData.go
similarity index 92%
rename from pluginData.go
rename to common/pluginData.go
index 0ebe61b..8b68f3c 100644
--- a/pluginData.go
+++ b/common/pluginData.go
@@ -12,11 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package apidVerifyApiKey
+package common
 
 import "github.com/apid/apid-core"
 
-var pluginData = apid.PluginData{
+var PluginData = apid.PluginData{
 	Name:    "apidVerifyAPIKey",
 	Version: "0.0.4",
 	ExtraData: map[string]interface{}{
diff --git a/init.go b/init.go
index 37fecd3..b147a1a 100644
--- a/init.go
+++ b/init.go
@@ -28,7 +28,7 @@
 )
 
 func init() {
-	apid.RegisterPlugin(initPlugin, pluginData)
+	apid.RegisterPlugin(initPlugin, common.PluginData)
 }
 
 func initPlugin(s apid.Services) (apid.PluginData, error) {
@@ -41,7 +41,7 @@
 	initManagers(services)
 	log.Debug("end init")
 
-	return pluginData, nil
+	return common.PluginData, nil
 }
 
 func initManagers(services apid.Services) apigeeSyncHandler {