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

[incubator-devlake] branch main updated: fix(bamboo): set domain layer's repo_url field with an acceptable value (#6141)

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

klesh 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 9b135713d fix(bamboo): set domain layer's repo_url field with an acceptable value (#6141)
9b135713d is described below

commit 9b135713ddccf93c8031f571fb41539cb9944a3b
Author: Lynwee <li...@merico.dev>
AuthorDate: Mon Sep 25 15:19:39 2023 +0800

    fix(bamboo): set domain layer's repo_url field with an acceptable value (#6141)
    
    * fix(bamboo): set domain layer's repo_url field with an acceptable value
    
    * fix(bamboo): fix e2e test
    
    * fix(bamboo): fix conflicts
    
    * fix(test): fix test case
---
 backend/plugins/bamboo/e2e/deploy_build_test.go    | 13 ++++++--
 backend/plugins/bamboo/e2e/deploy_test.go          |  1 +
 backend/plugins/bamboo/e2e/job_build_test.go       |  1 +
 backend/plugins/bamboo/e2e/job_test.go             |  1 +
 .../plugins/bamboo/e2e/plan_build_commits_test.go  |  1 +
 backend/plugins/bamboo/e2e/plan_build_test.go      |  1 +
 backend/plugins/bamboo/e2e/plan_test.go            |  1 +
 .../snapshot_tables/cicd_deployment_commits.csv    | 14 ++++-----
 .../e2e/snapshot_tables/cicd_pipeline_commits.csv  | 22 +++++++-------
 .../plugins/bamboo/tasks/deploy_build_convertor.go |  7 +++++
 .../plugins/bamboo/tasks/plan_commit_convertor.go  |  8 ++++-
 backend/plugins/bamboo/tasks/shared.go             | 12 ++++++++
 backend/plugins/bamboo/tasks/shared_test.go        | 35 ++++++++++++++++++++++
 13 files changed, 96 insertions(+), 21 deletions(-)

diff --git a/backend/plugins/bamboo/e2e/deploy_build_test.go b/backend/plugins/bamboo/e2e/deploy_build_test.go
index 69f13cc32..fd29ddc2c 100644
--- a/backend/plugins/bamboo/e2e/deploy_build_test.go
+++ b/backend/plugins/bamboo/e2e/deploy_build_test.go
@@ -18,8 +18,6 @@ limitations under the License.
 package e2e
 
 import (
-	"testing"
-
 	"github.com/apache/incubator-devlake/core/models/common"
 	"github.com/apache/incubator-devlake/core/models/domainlayer/devops"
 	"github.com/apache/incubator-devlake/helpers/e2ehelper"
@@ -27,8 +25,18 @@ import (
 	"github.com/apache/incubator-devlake/plugins/bamboo/impl"
 	"github.com/apache/incubator-devlake/plugins/bamboo/models"
 	"github.com/apache/incubator-devlake/plugins/bamboo/tasks"
+	"testing"
+	"time"
 )
 
+func getFakeAPIClient() *helper.ApiAsyncClient {
+	client := &helper.ApiClient{}
+	client.Setup("http://127.0.0.1:8080/bamboo/", nil, time.Second)
+	return &helper.ApiAsyncClient{
+		ApiClient: client,
+	}
+}
+
 func TestBambooDeployBuildDataFlow(t *testing.T) {
 	var bamboo impl.Bamboo
 	dataflowTester := e2ehelper.NewDataFlowTester(t, "bamboo", bamboo)
@@ -42,6 +50,7 @@ func TestBambooDeployBuildDataFlow(t *testing.T) {
 			},
 		},
 		RegexEnricher: helper.NewRegexEnricher(),
+		ApiClient:     getFakeAPIClient(),
 	}
 	taskData.RegexEnricher.TryAdd(devops.DEPLOYMENT, taskData.Options.DeploymentPattern)
 	taskData.RegexEnricher.TryAdd(devops.PRODUCTION, taskData.Options.ProductionPattern)
diff --git a/backend/plugins/bamboo/e2e/deploy_test.go b/backend/plugins/bamboo/e2e/deploy_test.go
index 62c7efc9b..54bf4a4a7 100644
--- a/backend/plugins/bamboo/e2e/deploy_test.go
+++ b/backend/plugins/bamboo/e2e/deploy_test.go
@@ -35,6 +35,7 @@ func TestBambooDeployDataFlow(t *testing.T) {
 			PlanKey:           "TEST1",
 			BambooScopeConfig: new(models.BambooScopeConfig),
 		},
+		ApiClient: getFakeAPIClient(),
 	}
 
 	// import raw data table
diff --git a/backend/plugins/bamboo/e2e/job_build_test.go b/backend/plugins/bamboo/e2e/job_build_test.go
index 2f69c1963..5db603638 100644
--- a/backend/plugins/bamboo/e2e/job_build_test.go
+++ b/backend/plugins/bamboo/e2e/job_build_test.go
@@ -43,6 +43,7 @@ func TestBambooJobBuildDataFlow(t *testing.T) {
 			},
 		},
 		RegexEnricher: helper.NewRegexEnricher(),
+		ApiClient:     getFakeAPIClient(),
 	}
 	taskData.RegexEnricher.TryAdd(devops.DEPLOYMENT, taskData.Options.DeploymentPattern)
 	// import raw data table
diff --git a/backend/plugins/bamboo/e2e/job_test.go b/backend/plugins/bamboo/e2e/job_test.go
index 419b062f0..dc89148e7 100644
--- a/backend/plugins/bamboo/e2e/job_test.go
+++ b/backend/plugins/bamboo/e2e/job_test.go
@@ -40,6 +40,7 @@ func TestBambooJobDataFlow(t *testing.T) {
 				ProductionPattern: "(?i)compile",
 			},
 		},
+		ApiClient: getFakeAPIClient(),
 	}
 	// import raw data table
 	// SELECT * FROM _raw_bamboo_api_job INTO OUTFILE "/tmp/_raw_bamboo_api_jobs.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
diff --git a/backend/plugins/bamboo/e2e/plan_build_commits_test.go b/backend/plugins/bamboo/e2e/plan_build_commits_test.go
index f52b894c8..ed8533481 100644
--- a/backend/plugins/bamboo/e2e/plan_build_commits_test.go
+++ b/backend/plugins/bamboo/e2e/plan_build_commits_test.go
@@ -42,6 +42,7 @@ func TestBambooPlanBuildCommitsDataFlow(t *testing.T) {
 				ProductionPattern: "(?i)compile",
 			},
 		},
+		ApiClient: getFakeAPIClient(),
 	}
 	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_bamboo_plan_build_commits.csv", &models.BambooPlanBuildVcsRevision{})
 	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_bamboo_plan_builds.csv", &models.BambooPlanBuild{})
diff --git a/backend/plugins/bamboo/e2e/plan_build_test.go b/backend/plugins/bamboo/e2e/plan_build_test.go
index e83654e80..ca9755d35 100644
--- a/backend/plugins/bamboo/e2e/plan_build_test.go
+++ b/backend/plugins/bamboo/e2e/plan_build_test.go
@@ -44,6 +44,7 @@ func TestBambooPlanBuildDataFlow(t *testing.T) {
 			},
 		},
 		RegexEnricher: helper.NewRegexEnricher(),
+		ApiClient:     getFakeAPIClient(),
 	}
 	taskData.RegexEnricher.TryAdd(devops.DEPLOYMENT, taskData.Options.DeploymentPattern)
 	taskData.RegexEnricher.TryAdd(devops.PRODUCTION, taskData.Options.ProductionPattern)
diff --git a/backend/plugins/bamboo/e2e/plan_test.go b/backend/plugins/bamboo/e2e/plan_test.go
index a8757081a..09987c8b1 100644
--- a/backend/plugins/bamboo/e2e/plan_test.go
+++ b/backend/plugins/bamboo/e2e/plan_test.go
@@ -39,6 +39,7 @@ func TestBambooPlanDataFlow(t *testing.T) {
 			PlanKey:           "TEST1",
 			BambooScopeConfig: new(models.BambooScopeConfig),
 		},
+		ApiClient: getFakeAPIClient(),
 	}
 
 	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_bamboo_plans.csv", models.BambooPlan{})
diff --git a/backend/plugins/bamboo/e2e/snapshot_tables/cicd_deployment_commits.csv b/backend/plugins/bamboo/e2e/snapshot_tables/cicd_deployment_commits.csv
index bcce96eae..3ab42c8d2 100644
--- a/backend/plugins/bamboo/e2e/snapshot_tables/cicd_deployment_commits.csv
+++ b/backend/plugins/bamboo/e2e/snapshot_tables/cicd_deployment_commits.csv
@@ -1,8 +1,8 @@
 id,commit_sha,cicd_scope_id,cicd_deployment_id,name,result,status,environment,created_date,started_date,finished_date,duration_sec,ref_name,repo_id,repo_url,prev_success_deployment_commit_id
-bamboo:BambooDeployBuild:1:1540097,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540097,release-1,FAILURE,DONE,dev,2023-07-31T10:16:41.000+00:00,2023-07-31T10:16:41.000+00:00,2023-07-31T10:16:41.000+00:00,0,,622595,,
-bamboo:BambooDeployBuild:1:1540100,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540100,release-1,FAILURE,DONE,dev,2023-07-31T11:50:10.000+00:00,2023-07-31T11:50:10.000+00:00,2023-07-31T11:50:10.000+00:00,0,,622595,,
-bamboo:BambooDeployBuild:1:1540101,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540101,release-2,FAILURE,DONE,dev,2023-07-31T11:51:14.000+00:00,2023-07-31T11:51:14.000+00:00,2023-07-31T11:51:14.000+00:00,0,,622595,,
-bamboo:BambooDeployBuild:1:1540102,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540102,release-2,SUCCESS,DONE,dev,2023-07-31T11:52:32.000+00:00,2023-07-31T11:52:32.000+00:00,2023-07-31T11:52:32.000+00:00,0,,622595,,
-bamboo:BambooDeployBuild:1:1540105,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540105,release-2,SUCCESS,DONE,dev,2023-08-01T09:31:53.000+00:00,2023-08-01T09:31:53.000+00:00,2023-08-01T09:31:53.000+00:00,0,,622595,,
-bamboo:BambooDeployBuild:1:1540106,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540106,release-2,SUCCESS,DONE,dev,2023-08-01T09:32:00.000+00:00,2023-08-01T09:32:00.000+00:00,2023-08-01T09:32:00.000+00:00,0,,622595,,
-bamboo:BambooDeployBuild:1:1540117,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540117,release-3,SUCCESS,DONE,dev,2023-08-03T09:49:07.000+00:00,2023-08-03T09:49:07.000+00:00,2023-08-03T09:49:07.000+00:00,0,,622595,,
+bamboo:BambooDeployBuild:1:1540097,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540097,release-1,FAILURE,DONE,dev,2023-07-31T10:16:41.000+00:00,2023-07-31T10:16:41.000+00:00,2023-07-31T10:16:41.000+00:00,0,,622595,fake://127.0.0.1:8080/repos/622595,
+bamboo:BambooDeployBuild:1:1540100,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540100,release-1,FAILURE,DONE,dev,2023-07-31T11:50:10.000+00:00,2023-07-31T11:50:10.000+00:00,2023-07-31T11:50:10.000+00:00,0,,622595,fake://127.0.0.1:8080/repos/622595,
+bamboo:BambooDeployBuild:1:1540101,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540101,release-2,FAILURE,DONE,dev,2023-07-31T11:51:14.000+00:00,2023-07-31T11:51:14.000+00:00,2023-07-31T11:51:14.000+00:00,0,,622595,fake://127.0.0.1:8080/repos/622595,
+bamboo:BambooDeployBuild:1:1540102,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540102,release-2,SUCCESS,DONE,dev,2023-07-31T11:52:32.000+00:00,2023-07-31T11:52:32.000+00:00,2023-07-31T11:52:32.000+00:00,0,,622595,fake://127.0.0.1:8080/repos/622595,
+bamboo:BambooDeployBuild:1:1540105,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540105,release-2,SUCCESS,DONE,dev,2023-08-01T09:31:53.000+00:00,2023-08-01T09:31:53.000+00:00,2023-08-01T09:31:53.000+00:00,0,,622595,fake://127.0.0.1:8080/repos/622595,
+bamboo:BambooDeployBuild:1:1540106,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540106,release-2,SUCCESS,DONE,dev,2023-08-01T09:32:00.000+00:00,2023-08-01T09:32:00.000+00:00,2023-08-01T09:32:00.000+00:00,0,,622595,fake://127.0.0.1:8080/repos/622595,
+bamboo:BambooDeployBuild:1:1540117,79b062bd53af15c701193c90b543386557cb7a3a,bamboo:BambooPlan:1:TEST-PLA2,bamboo:BambooDeployBuild:1:1540117,release-3,SUCCESS,DONE,dev,2023-08-03T09:49:07.000+00:00,2023-08-03T09:49:07.000+00:00,2023-08-03T09:49:07.000+00:00,0,,622595,fake://127.0.0.1:8080/repos/622595,
diff --git a/backend/plugins/bamboo/e2e/snapshot_tables/cicd_pipeline_commits.csv b/backend/plugins/bamboo/e2e/snapshot_tables/cicd_pipeline_commits.csv
index 1a18d25dd..dafc2e66e 100644
--- a/backend/plugins/bamboo/e2e/snapshot_tables/cicd_pipeline_commits.csv
+++ b/backend/plugins/bamboo/e2e/snapshot_tables/cicd_pipeline_commits.csv
@@ -1,12 +1,12 @@
 pipeline_id,commit_sha,branch,repo_id,repo_url
-bamboo:BambooPlanBuild:1:TEST-PLA2-10,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-11,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-12,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-2,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-3,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-4,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-5,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-6,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-7,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-8,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
-bamboo:BambooPlanBuild:1:TEST-PLA2-9,79b062bd53af15c701193c90b543386557cb7a3a,,,devlake-louis
+bamboo:BambooPlanBuild:1:TEST-PLA2-10,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-11,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-12,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-2,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-3,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-4,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-5,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-6,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-7,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-8,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
+bamboo:BambooPlanBuild:1:TEST-PLA2-9,79b062bd53af15c701193c90b543386557cb7a3a,,,fake://127.0.0.1:8080/repos/622595
diff --git a/backend/plugins/bamboo/tasks/deploy_build_convertor.go b/backend/plugins/bamboo/tasks/deploy_build_convertor.go
index 592cd9434..083dab405 100644
--- a/backend/plugins/bamboo/tasks/deploy_build_convertor.go
+++ b/backend/plugins/bamboo/tasks/deploy_build_convertor.go
@@ -59,6 +59,7 @@ func (deployBuildWithVcsRevision deployBuildWithVcsRevision) GenerateCICDDeploym
 
 func ConvertDeployBuilds(taskCtx plugin.SubTaskContext) errors.Error {
 	db := taskCtx.GetDal()
+	logger := taskCtx.GetLogger()
 	rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_JOB_BUILD_TABLE)
 	cursor, err := db.Cursor(
 		dal.Select("db.*, pbc.repository_id, pbc.repository_name, pbc.vcs_revision_key, p.name as project_plan_name, p.project_name"),
@@ -121,6 +122,12 @@ func ConvertDeployBuilds(taskCtx plugin.SubTaskContext) errors.Error {
 				duration := uint64(input.FinishedDate.Sub(*input.StartedDate).Seconds())
 				deploymentCommit.DurationSec = &duration
 			}
+			fakeRepoUrl, err := generateFakeRepoUrl(data.ApiClient.GetEndpoint(), input.RepositoryId)
+			if err != nil {
+				logger.Warn(err, "generate fake repo url, endpoint: %s, repo id: %d", data.ApiClient.GetEndpoint(), input.RepositoryId)
+			} else {
+				deploymentCommit.RepoUrl = fakeRepoUrl
+			}
 
 			return []interface{}{deploymentCommit, deploymentCommit.ToDeployment()}, nil
 		},
diff --git a/backend/plugins/bamboo/tasks/plan_commit_convertor.go b/backend/plugins/bamboo/tasks/plan_commit_convertor.go
index a6d891eb9..ec9384b49 100644
--- a/backend/plugins/bamboo/tasks/plan_commit_convertor.go
+++ b/backend/plugins/bamboo/tasks/plan_commit_convertor.go
@@ -40,6 +40,7 @@ var ConvertPlanVcsMeta = plugin.SubTaskMeta{
 
 func ConvertPlanVcs(taskCtx plugin.SubTaskContext) errors.Error {
 	db := taskCtx.GetDal()
+	logger := taskCtx.GetLogger()
 	rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, RAW_PLAN_BUILD_TABLE)
 	cursor, err := db.Cursor(
 		dal.From(&models.BambooPlanBuildVcsRevision{}),
@@ -61,9 +62,14 @@ func ConvertPlanVcs(taskCtx plugin.SubTaskContext) errors.Error {
 			domainPlanVcs := &devops.CiCDPipelineCommit{
 				PipelineId: planBuildIdGen.Generate(data.Options.ConnectionId, line.PlanBuildKey),
 				CommitSha:  line.VcsRevisionKey,
-				RepoUrl:    line.RepositoryName,
 			}
 			domainPlanVcs.RepoId = repoMap[line.RepositoryId]
+			fakeRepoUrl, err := generateFakeRepoUrl(data.ApiClient.GetEndpoint(), line.RepositoryId)
+			if err != nil {
+				logger.Warn(err, "generate fake repo url, endpoint: %s, repo id: %d", data.ApiClient.GetEndpoint(), line.RepositoryId)
+			} else {
+				domainPlanVcs.RepoUrl = fakeRepoUrl
+			}
 			return []interface{}{
 				domainPlanVcs,
 			}, nil
diff --git a/backend/plugins/bamboo/tasks/shared.go b/backend/plugins/bamboo/tasks/shared.go
index f74af27a1..0d834a0f0 100644
--- a/backend/plugins/bamboo/tasks/shared.go
+++ b/backend/plugins/bamboo/tasks/shared.go
@@ -103,3 +103,15 @@ func getBambooHomePage(endpoint string) (string, error) {
 		return fmt.Sprintf("%s://%s%s", protocol, host, bambooPath), nil
 	}
 }
+
+// generateFakeRepoUrl will return a fake url for repo url field.
+func generateFakeRepoUrl(endpoint string, repoId int) (string, error) {
+	if endpoint == "" {
+		return "", errors.Default.New("empty endpoint")
+	}
+	endpointURL, err := url.Parse(endpoint)
+	if err != nil {
+		return "", err
+	}
+	return fmt.Sprintf("fake://%s/repos/%d", endpointURL.Host, repoId), nil
+}
diff --git a/backend/plugins/bamboo/tasks/shared_test.go b/backend/plugins/bamboo/tasks/shared_test.go
index 462408cd2..941643c48 100644
--- a/backend/plugins/bamboo/tasks/shared_test.go
+++ b/backend/plugins/bamboo/tasks/shared_test.go
@@ -79,3 +79,38 @@ func Test_getBambooWebURL(t *testing.T) {
 		})
 	}
 }
+
+func Test_generateFakeRepoURL(t *testing.T) {
+	type args struct {
+		endpoint string
+		repoID   int
+	}
+	tests := []struct {
+		name    string
+		args    args
+		want    string
+		wantErr bool
+	}{
+		{
+			name: "t-1",
+			args: args{
+				endpoint: "http://127.0.0.1:8080/abc",
+				repoID:   123,
+			},
+			want:    "fake://127.0.0.1:8080/repos/123",
+			wantErr: false,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			got, err := generateFakeRepoUrl(tt.args.endpoint, tt.args.repoID)
+			if (err != nil) != tt.wantErr {
+				t.Errorf("generateFakeRepoUrl() error = %v, wantErr %v", err, tt.wantErr)
+				return
+			}
+			if got != tt.want {
+				t.Errorf("generateFakeRepoUrl() got = %v, want %v", got, tt.want)
+			}
+		})
+	}
+}