2017-12-24 03:33:34 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package integrations
import (
"math/rand"
"net/http"
2021-04-16 21:30:16 +03:00
"net/url"
2017-12-24 03:33:34 +03:00
"testing"
"code.gitea.io/gitea/models"
2021-09-19 14:49:59 +03:00
"code.gitea.io/gitea/models/db"
2019-05-11 13:21:34 +03:00
api "code.gitea.io/gitea/modules/structs"
2017-12-24 03:33:34 +03:00
)
2021-04-16 21:30:16 +03:00
// StringWithCharset random string (from https://www.calhoun.io/creating-random-strings-in-go/)
2017-12-24 03:33:34 +03:00
func StringWithCharset ( length int , charset string ) string {
b := make ( [ ] byte , length )
for i := range b {
b [ i ] = charset [ rand . Intn ( len ( charset ) ) ]
}
return string ( b )
}
func BenchmarkRepoBranchCommit ( b * testing . B ) {
2021-04-16 21:30:16 +03:00
onGiteaRunTB ( b , func ( t testing . TB , u * url . URL ) {
b := t . ( * testing . B )
samples := [ ] int64 { 1 , 2 , 3 }
b . ResetTimer ( )
2017-12-24 03:33:34 +03:00
2021-04-16 21:30:16 +03:00
for _ , repoID := range samples {
b . StopTimer ( )
2021-09-19 14:49:59 +03:00
repo := db . AssertExistsAndLoadBean ( b , & models . Repository { ID : repoID } ) . ( * models . Repository )
2021-04-16 21:30:16 +03:00
b . StartTimer ( )
b . Run ( repo . Name , func ( b * testing . B ) {
session := loginUser ( b , "user2" )
b . ResetTimer ( )
b . Run ( "CreateBranch" , func ( b * testing . B ) {
2017-12-24 03:33:34 +03:00
b . StopTimer ( )
branchName := StringWithCharset ( 5 + rand . Intn ( 10 ) , "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" )
b . StartTimer ( )
2021-04-16 21:30:16 +03:00
for i := 0 ; i < b . N ; i ++ {
b . Run ( "new_" + branchName , func ( b * testing . B ) {
b . Skip ( "benchmark broken" ) // TODO fix
testAPICreateBranch ( b , session , repo . OwnerName , repo . Name , repo . DefaultBranch , "new_" + branchName , http . StatusCreated )
} )
}
} )
b . Run ( "GetBranches" , func ( b * testing . B ) {
req := NewRequestf ( b , "GET" , "/api/v1/repos/%s/branches" , repo . FullName ( ) )
2017-12-24 03:33:34 +03:00
session . MakeRequest ( b , req , http . StatusOK )
2021-04-16 21:30:16 +03:00
} )
b . Run ( "AccessCommits" , func ( b * testing . B ) {
var branches [ ] * api . Branch
req := NewRequestf ( b , "GET" , "/api/v1/repos/%s/branches" , repo . FullName ( ) )
resp := session . MakeRequest ( b , req , http . StatusOK )
DecodeJSON ( b , resp , & branches )
b . ResetTimer ( ) //We measure from here
if len ( branches ) != 0 {
for i := 0 ; i < b . N ; i ++ {
req := NewRequestf ( b , "GET" , "/api/v1/repos/%s/commits?sha=%s" , repo . FullName ( ) , branches [ i % len ( branches ) ] . Name )
session . MakeRequest ( b , req , http . StatusOK )
}
}
} )
2017-12-24 03:33:34 +03:00
} )
2021-04-16 21:30:16 +03:00
}
} )
2017-12-24 03:33:34 +03:00
}