You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by ab...@apache.org on 2023/02/10 07:19:41 UTC

[incubator-devlake] branch main updated: feat: sonarqube account e2e (#4371)

This is an automated email from the ASF dual-hosted git repository.

abeizn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new b2a07d730 feat: sonarqube account e2e (#4371)
b2a07d730 is described below

commit b2a07d7302722c20461e440de42404588e598716
Author: abeizn <zi...@merico.dev>
AuthorDate: Fri Feb 10 15:19:36 2023 +0800

    feat: sonarqube account e2e (#4371)
    
    feat: sonarqube account and project e2e
---
 backend/plugins/sonarqube/e2e/account_test.go      | 68 +++++++++++++++++++++
 backend/plugins/sonarqube/e2e/project_test.go      | 70 ++++++++++++++++++++++
 .../e2e/raw_tables/_raw_sonarqube_accounts.csv     |  8 +++
 .../e2e/raw_tables/_raw_sonarqube_projects.csv     | 12 ++++
 .../snapshot_tables/_tool_sonarqube_accounts.csv   |  5 ++
 .../snapshot_tables/_tool_sonarqube_projects.csv   |  3 +
 .../sonarqube/e2e/snapshot_tables/accounts.csv     |  3 +
 .../sonarqube/e2e/snapshot_tables/projects.csv     |  2 +
 8 files changed, 171 insertions(+)

diff --git a/backend/plugins/sonarqube/e2e/account_test.go b/backend/plugins/sonarqube/e2e/account_test.go
new file mode 100644
index 000000000..b53b042b1
--- /dev/null
+++ b/backend/plugins/sonarqube/e2e/account_test.go
@@ -0,0 +1,68 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 e2e
+
+import (
+	"testing"
+
+	"github.com/apache/incubator-devlake/core/models/common"
+	"github.com/apache/incubator-devlake/core/models/domainlayer/crossdomain"
+	"github.com/apache/incubator-devlake/helpers/e2ehelper"
+	"github.com/apache/incubator-devlake/plugins/sonarqube/impl"
+	"github.com/apache/incubator-devlake/plugins/sonarqube/models"
+	"github.com/apache/incubator-devlake/plugins/sonarqube/tasks"
+)
+
+func TestSonarqubeAccountDataFlow(t *testing.T) {
+
+	var sonarqube impl.Sonarqube
+	dataflowTester := e2ehelper.NewDataFlowTester(t, "sonarqube", sonarqube)
+
+	taskData := &tasks.SonarqubeTaskData{
+		Options: &tasks.SonarqubeOptions{
+			ConnectionId: 1,
+		},
+	}
+
+	// import raw data table
+	dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_sonarqube_accounts.csv",
+		"_raw_sonarqube_accounts")
+
+	// verify extraction
+	dataflowTester.FlushTabler(&models.SonarqubeAccount{})
+	dataflowTester.Subtask(tasks.ExtractAccountsMeta, taskData)
+
+	taskData2 := &tasks.SonarqubeTaskData{
+		Options: &tasks.SonarqubeOptions{
+			ConnectionId: 2,
+		},
+	}
+
+	dataflowTester.Subtask(tasks.ExtractAccountsMeta, taskData2)
+	dataflowTester.VerifyTableWithOptions(&models.SonarqubeAccount{}, e2ehelper.TableOptions{
+		CSVRelPath:  "./snapshot_tables/_tool_sonarqube_accounts.csv",
+		IgnoreTypes: []interface{}{common.NoPKModel{}},
+	})
+
+	dataflowTester.FlushTabler(&crossdomain.Account{})
+	dataflowTester.Subtask(tasks.ConvertAccountsMeta, taskData2)
+	dataflowTester.VerifyTableWithOptions(&crossdomain.Account{}, e2ehelper.TableOptions{
+		CSVRelPath:  "./snapshot_tables/accounts.csv",
+		IgnoreTypes: []interface{}{common.NoPKModel{}},
+	})
+}
diff --git a/backend/plugins/sonarqube/e2e/project_test.go b/backend/plugins/sonarqube/e2e/project_test.go
new file mode 100644
index 000000000..e0cadd12e
--- /dev/null
+++ b/backend/plugins/sonarqube/e2e/project_test.go
@@ -0,0 +1,70 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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 e2e
+
+import (
+	"testing"
+
+	"github.com/apache/incubator-devlake/core/models/common"
+	"github.com/apache/incubator-devlake/core/models/domainlayer/securitytesting"
+	"github.com/apache/incubator-devlake/helpers/e2ehelper"
+	"github.com/apache/incubator-devlake/plugins/sonarqube/impl"
+	"github.com/apache/incubator-devlake/plugins/sonarqube/models"
+	"github.com/apache/incubator-devlake/plugins/sonarqube/tasks"
+)
+
+func TestSonarqubeProjectDataFlow(t *testing.T) {
+
+	var sonarqube impl.Sonarqube
+	dataflowTester := e2ehelper.NewDataFlowTester(t, "sonarqube", sonarqube)
+
+	taskData := &tasks.SonarqubeTaskData{
+		Options: &tasks.SonarqubeOptions{
+			ConnectionId: 1,
+			ProjectKey:   "fa2cf9cd-c448-4fc3-99a5-1c893f15d84c",
+		},
+	}
+
+	// import raw data table
+	dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_sonarqube_projects.csv",
+		"_raw_sonarqube_projects")
+
+	// verify extraction
+	dataflowTester.FlushTabler(&models.SonarqubeProject{})
+	dataflowTester.Subtask(tasks.ExtractProjectsMeta, taskData)
+
+	taskData2 := &tasks.SonarqubeTaskData{
+		Options: &tasks.SonarqubeOptions{
+			ConnectionId: 2,
+			ProjectKey:   "e2c6d5e9-a321-4e8c-b322-03d9599ef962",
+		},
+	}
+
+	dataflowTester.Subtask(tasks.ExtractProjectsMeta, taskData2)
+	dataflowTester.VerifyTableWithOptions(&models.SonarqubeProject{}, e2ehelper.TableOptions{
+		CSVRelPath:  "./snapshot_tables/_tool_sonarqube_projects.csv",
+		IgnoreTypes: []interface{}{common.NoPKModel{}},
+	})
+
+	dataflowTester.FlushTabler(&securitytesting.StProject{})
+	dataflowTester.Subtask(tasks.ConvertProjectsMeta, taskData2)
+	dataflowTester.VerifyTableWithOptions(&securitytesting.StProject{}, e2ehelper.TableOptions{
+		CSVRelPath:  "./snapshot_tables/projects.csv",
+		IgnoreTypes: []interface{}{common.NoPKModel{}},
+	})
+}
diff --git a/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_accounts.csv b/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_accounts.csv
new file mode 100644
index 000000000..83d0d4c13
--- /dev/null
+++ b/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_accounts.csv
@@ -0,0 +1,8 @@
+"id","params","data","url","input","created_at"
+1,"{""connectionId"":1,""ProjectKey"":""""}","{""login"":""admin"",""name"":""Administrator"",""active"":true,""groups"":[""sonar-administrators"",""sonar-users""],""tokensCount"":3,""local"":true,""externalIdentity"":""admin"",""externalProvider"":""sonarqube"",""lastConnectionDate"":""2023-02-09T11:28:44+0000""}","http://35.89.154.221:30008/api/users/search?p=1&ps=100","null","2023-02-09 11:55:28.770"
+2,"{""connectionId"":1,""ProjectKey"":""""}","{""login"":""admin1"",""name"":""Administrator1"",""active"":false,""groups"":[""sonar-administrators"",""sonar-users""],""tokensCount"":3,""local"":true,""externalIdentity"":""admin"",""externalProvider"":""sonarqube"",""lastConnectionDate"":""2023-02-09T11:28:44+0000""}","http://35.89.154.221:30008/api/users/search?p=1&ps=100","null","2023-02-09 11:55:28.770"
+3,"{""connectionId"":2,""ProjectKey"":""""}","{""login"":""admin2"",""name"":""Administrator2"",""email"":""aaa@email.com"",""active"":true,""groups"":[""sonar-administrators"",""sonar-users""],""tokensCount"":3,""local"":true,""externalIdentity"":""admin"",""externalProvider"":""sonarqube"",""lastConnectionDate"":""2023-02-09T11:28:44+0000""}","http://35.89.154.221:30008/api/users/search?p=1&ps=100","null","2023-02-09 11:55:28.770"
+4,"{""connectionId"":2,""ProjectKey"":""""}","{""login"":""admin3"",""name"":""Administrator3"",""active"":false,""groups"":[""sonar-administrators"",""sonar-users""],""tokensCount"":3,""local"":true,""externalIdentity"":""admin"",""externalProvider"":""sonarqube"",""lastConnectionDate"":""2023-02-09T11:28:44+0000""}","http://35.89.154.221:30008/api/users/search?p=1&ps=100","null","2023-02-09 11:55:28.770"
+5,"{""connectionId"":1,""ProjectKey"":""xxx""}","{""login"":""admin4"",""name"":""Administrator4"",""active"":true,""groups"":[""sonar-administrators"",""sonar-users""],""tokensCount"":3,""local"":true,""externalIdentity"":""admin"",""externalProvider"":""sonarqube"",""lastConnectionDate"":""2023-02-09T11:28:44+0000""}","http://35.89.154.221:30008/api/users/search?p=1&ps=100","null","2023-02-09 11:55:28.770"
+6,"{""connectionId"":2,""ProjectKey"":""xxx""}","{""login"":""admin4"",""name"":""Administrator4"",""active"":true,""groups"":[""sonar-administrators"",""sonar-users""],""tokensCount"":3,""local"":true,""externalIdentity"":""admin"",""externalProvider"":""sonarqube"",""lastConnectionDate"":""2023-02-09T11:28:44+0000""}","http://35.89.154.221:30008/api/users/search?p=1&ps=100","null","2023-02-09 11:55:28.770"
+7,"{""connectionId"":3,""ProjectKey"":""""}","{""login"":""admin4"",""name"":""Administrator4"",""active"":true,""groups"":[""sonar-administrators"",""sonar-users""],""tokensCount"":3,""local"":true,""externalIdentity"":""admin"",""externalProvider"":""sonarqube"",""lastConnectionDate"":""2023-02-09T11:28:44+0000""}","http://35.89.154.221:30008/api/users/search?p=1&ps=100","null","2023-02-09 11:55:28.770"
diff --git a/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_projects.csv b/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_projects.csv
new file mode 100644
index 000000000..a4da44afd
--- /dev/null
+++ b/backend/plugins/sonarqube/e2e/raw_tables/_raw_sonarqube_projects.csv
@@ -0,0 +1,12 @@
+"id","params","data","url","input","created_at"
+642,"{""connectionId"":1,""ProjectKey"":""fa2cf9cd-c448-4fc3-99a5-1c893f15d84c""}","{""key"":""fa2cf9cd-c448-4fc3-99a5-1c893f15d84c"",""name"":""activeadmin"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2022-12-23T13:52:39+0000"",""revision"":""51689e48ec3faa51127b8462b2219e5e0c09ad8a""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+643,"{""connectionId"":1,""ProjectKey"":""""}","{""key"":""a67b8166-5768-46a5-8830-6d86d797419a"",""name"":""actix-web"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2023-01-04T22:36:46+0000"",""revision"":""08c2cdf6416287d63387584213ea3dd41b007ef6""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+644,"{""connectionId"":2,""ProjectKey"":""""}","{""key"":""a7c268ed-525b-438d-8729-18e83229e66c"",""name"":""Aerial"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2022-12-22T18:26:29+0000"",""revision"":""405bc2494af895f8b9ccbf12f3d0c9530a154011""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+645,"{""connectionId"":2,""ProjectKey"":""""}","{""key"":""f5a50c63-2e8f-4107-9014-853f6f467757"",""name"":""aerosolve"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2023-01-02T06:58:08+0000"",""revision"":""442e76ebb7cbc7f60b04fbfac30dbf862aaffc67""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+646,"{""connectionId"":2,""ProjectKey"":""""}","{""key"":""f960efd5-84eb-44c9-888c-996457ed76d7"",""name"":""AFNetworking"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2022-12-22T12:28:19+0000"",""revision"":""4eaec5b586ddd897ebeda896e332a62a9fdab818""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+647,"{""connectionId"":2,""ProjectKey"":""""}","{""key"":""8b075027-0a3f-44ff-89e1-751d173b4f9d"",""name"":""akka"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2022-12-20T16:27:23+0000"",""revision"":""b7b79a2da1231520fe66532b7af53179d1714952""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+648,"{""connectionId"":3,""ProjectKey"":""""}","{""key"":""eb4e9de1-85f1-4568-9352-94a264ba5bef"",""name"":""akka"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2023-01-01T03:54:58+0000"",""revision"":""50372b37c5cf9ef467c4637f4e526a5fe95fc9c1""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+649,"{""connectionId"":3,""ProjectKey"":""""}","{""key"":""4f3b6f44-dbcd-4507-9cc8-c3e460f1c69e"",""name"":""Alamofire"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2023-01-05T01:14:55+0000"",""revision"":""ce7f662709a152e840b130a158b9afef3402e146""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+650,"{""connectionId"":3,""ProjectKey"":""f1f70ac0-e607-42b8-8fda-46b28f7d3430""}","{""key"":""f1f70ac0-e607-42b8-8fda-46b28f7d3430"",""name"":""algorithms"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2022-12-26T10:57:53+0000"",""revision"":""52b9408c98eaa8458083b27410c0c364406d6e24""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+651,"{""connectionId"":2,""ProjectKey"":""e2c6d5e9-a321-4e8c-b322-03d9599ef962""}","{""key"":""e2c6d5e9-a321-4e8c-b322-03d9599ef962"",""name"":""Android-Universal-Image-Loader"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2022-12-24T18:42:09+0000"",""revision"":""458df4da2e23ba9ad76c79241a948cdfcccf72ae""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
+652,"{""connectionId"":1,""ProjectKey"":""""}","{""key"":""0892ae2f-6a07-4613-a1dc-bf29158afc52"",""name"":""AndroidUtilCode"",""qualifier"":""TRK"",""visibility"":""public"",""lastAnalysisDate"":""2023-01-05T01:25:34+0000"",""revision"":""51c8124045ec5b7c6d342b94a4020ed2f7fda496""}","http://35.89.154.221:30008/api/projects/search?p=1&ps=100","null","2023-02-10 02:46:14.044"
diff --git a/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_accounts.csv b/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_accounts.csv
new file mode 100644
index 000000000..20a039dc5
--- /dev/null
+++ b/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_accounts.csv
@@ -0,0 +1,5 @@
+connection_id,login,name,email,active,local
+1,admin,Administrator,,1,1
+1,admin1,Administrator1,,0,1
+2,admin2,Administrator2,aaa@email.com,1,1
+2,admin3,Administrator3,,0,1
diff --git a/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_projects.csv b/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_projects.csv
new file mode 100644
index 000000000..7e143b837
--- /dev/null
+++ b/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_projects.csv
@@ -0,0 +1,3 @@
+connection_id,project_key,name,qualifier,visibility,last_analysis_date,revision
+1,fa2cf9cd-c448-4fc3-99a5-1c893f15d84c,activeadmin,TRK,public,2022-12-23T13:52:39.000+00:00,51689e48ec3faa51127b8462b2219e5e0c09ad8a
+2,e2c6d5e9-a321-4e8c-b322-03d9599ef962,Android-Universal-Image-Loader,TRK,public,2022-12-24T18:42:09.000+00:00,458df4da2e23ba9ad76c79241a948cdfcccf72ae
diff --git a/backend/plugins/sonarqube/e2e/snapshot_tables/accounts.csv b/backend/plugins/sonarqube/e2e/snapshot_tables/accounts.csv
new file mode 100644
index 000000000..f30153ddf
--- /dev/null
+++ b/backend/plugins/sonarqube/e2e/snapshot_tables/accounts.csv
@@ -0,0 +1,3 @@
+id,email,full_name,user_name,avatar_url,organization,created_date,status
+sonarqube:SonarqubeAccount:2:admin2,aaa@email.com,Administrator2,admin2,,,,0
+sonarqube:SonarqubeAccount:2:admin3,,Administrator3,admin3,,,,0
diff --git a/backend/plugins/sonarqube/e2e/snapshot_tables/projects.csv b/backend/plugins/sonarqube/e2e/snapshot_tables/projects.csv
new file mode 100644
index 000000000..0e746ce66
--- /dev/null
+++ b/backend/plugins/sonarqube/e2e/snapshot_tables/projects.csv
@@ -0,0 +1,2 @@
+id,name,qualifier,visibility,last_analysis_date,commit_sha
+sonarqube:SonarqubeProject:2:e2c6d5e9-a321-4e8c-b322-03d9599ef962,Android-Universal-Image-Loader,TRK,public,2022-12-24T18:42:09.000+00:00,458df4da2e23ba9ad76c79241a948cdfcccf72ae