mirror of
https://github.com/goharbor/harbor
synced 2025-04-16 13:39:38 +00:00
175 lines
4.7 KiB
Go
175 lines
4.7 KiB
Go
// Copyright Project Harbor Authors
|
|
//
|
|
// 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 test
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
|
|
"fmt"
|
|
"os"
|
|
"sort"
|
|
|
|
"github.com/goharbor/harbor/src/common"
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
// RequestHandlerMapping is a mapping between request and its handler
|
|
type RequestHandlerMapping struct {
|
|
// Method is the method the request used
|
|
Method string
|
|
// Pattern is the pattern the request must match
|
|
Pattern string
|
|
// Handler is the handler which handles the request
|
|
Handler func(http.ResponseWriter, *http.Request)
|
|
}
|
|
|
|
// ServeHTTP ...
|
|
func (rhm *RequestHandlerMapping) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
if len(rhm.Method) != 0 && r.Method != strings.ToUpper(rhm.Method) {
|
|
w.WriteHeader(http.StatusMethodNotAllowed)
|
|
return
|
|
}
|
|
|
|
rhm.Handler(w, r)
|
|
}
|
|
|
|
// Response is a response used for unit test
|
|
type Response struct {
|
|
// StatusCode is the status code of the response
|
|
StatusCode int
|
|
// Headers are the headers of the response
|
|
Headers map[string]string
|
|
// Boby is the body of the response
|
|
Body []byte
|
|
}
|
|
|
|
// Handler returns a handler function which handle requst according to
|
|
// the response provided
|
|
func Handler(resp *Response) func(http.ResponseWriter, *http.Request) {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
if resp == nil {
|
|
return
|
|
}
|
|
|
|
for k, v := range resp.Headers {
|
|
w.Header().Add(http.CanonicalHeaderKey(k), v)
|
|
}
|
|
|
|
if resp.StatusCode == 0 {
|
|
resp.StatusCode = http.StatusOK
|
|
}
|
|
w.WriteHeader(resp.StatusCode)
|
|
|
|
if len(resp.Body) != 0 {
|
|
io.Copy(w, bytes.NewReader(resp.Body))
|
|
}
|
|
}
|
|
}
|
|
|
|
// NewServer creates a HTTP server for unit test
|
|
func NewServer(mappings ...*RequestHandlerMapping) *httptest.Server {
|
|
r := mux.NewRouter()
|
|
|
|
for _, mapping := range mappings {
|
|
r.PathPrefix(mapping.Pattern).Handler(mapping).Methods(mapping.Method)
|
|
}
|
|
|
|
return httptest.NewServer(r)
|
|
}
|
|
|
|
// GetUnitTestConfig ...
|
|
func GetUnitTestConfig() map[string]interface{} {
|
|
ipAddress := os.Getenv("IP")
|
|
return map[string]interface{}{
|
|
common.ExtEndpoint: fmt.Sprintf("https://%s", ipAddress),
|
|
common.AUTHMode: "db_auth",
|
|
common.DatabaseType: "postgresql",
|
|
common.PostGreSQLHOST: ipAddress,
|
|
common.PostGreSQLPort: 5432,
|
|
common.PostGreSQLUsername: "postgres",
|
|
common.PostGreSQLPassword: "root123",
|
|
common.PostGreSQLDatabase: "registry",
|
|
common.LDAPURL: "ldap://ldap.vmware.com",
|
|
common.LDAPSearchDN: "cn=admin,dc=example,dc=com",
|
|
common.LDAPSearchPwd: "admin",
|
|
common.LDAPBaseDN: "dc=example,dc=com",
|
|
common.LDAPUID: "uid",
|
|
common.LDAPFilter: "",
|
|
common.LDAPScope: 2,
|
|
common.LDAPTimeout: 30,
|
|
common.LDAPVerifyCert: true,
|
|
common.UAAVerifyCert: true,
|
|
common.ClairDBHost: "postgresql",
|
|
common.AdminInitialPassword: "Harbor12345",
|
|
common.LDAPGroupSearchFilter: "objectclass=groupOfNames",
|
|
common.LDAPGroupBaseDN: "dc=example,dc=com",
|
|
common.LDAPGroupAttributeName: "cn",
|
|
common.LDAPGroupSearchScope: 2,
|
|
common.LDAPGroupAdminDn: "cn=harbor_users,ou=groups,dc=example,dc=com",
|
|
common.WithNotary: "false",
|
|
common.WithChartMuseum: "false",
|
|
common.SelfRegistration: "true",
|
|
common.WithClair: "true",
|
|
common.TokenServiceURL: "http://core:8080/service/token",
|
|
common.RegistryURL: fmt.Sprintf("http://%s:5000", ipAddress),
|
|
}
|
|
}
|
|
|
|
// TraceCfgMap ...
|
|
func TraceCfgMap(cfgs map[string]interface{}) {
|
|
var keys []string
|
|
for k := range cfgs {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
for _, k := range keys {
|
|
fmt.Printf("%v=%v\n", k, cfgs[k])
|
|
}
|
|
}
|
|
|
|
// CheckSetsEqual - check int set if they are equals
|
|
func CheckSetsEqual(setA, setB []int) bool {
|
|
if len(setA) != len(setB) {
|
|
return false
|
|
}
|
|
type void struct{}
|
|
var exist void
|
|
setAll := make(map[int]void)
|
|
for _, r := range setA {
|
|
setAll[r] = exist
|
|
}
|
|
for _, r := range setB {
|
|
if _, ok := setAll[r]; !ok {
|
|
return false
|
|
}
|
|
}
|
|
|
|
setAll = make(map[int]void)
|
|
for _, r := range setB {
|
|
setAll[r] = exist
|
|
}
|
|
for _, r := range setA {
|
|
if _, ok := setAll[r]; !ok {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
|
|
}
|