| /* |
| * 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 config |
| |
| import ( |
| "encoding/json" |
| "log" |
| "os" |
| "testing" |
| ) |
| |
| import ( |
| "github.com/stretchr/testify/assert" |
| ) |
| |
| import ( |
| "github.com/apache/dubbo-go-pixiu/pkg/model" |
| ) |
| |
| var b model.Bootstrap |
| |
| func TestMain(m *testing.M) { |
| log.Println("Prepare Bootstrap") |
| b = model.Bootstrap{ |
| StaticResources: model.StaticResources{ |
| Listeners: []model.Listener{ |
| { |
| Name: "net/http", |
| Address: model.Address{ |
| SocketAddress: model.SocketAddress{ |
| ProtocolStr: "HTTP", |
| Address: "0.0.0.0", |
| Port: 8888, |
| }, |
| }, |
| Config: model.HttpConfig{ |
| IdleTimeoutStr: "5s", |
| WriteTimeoutStr: "5s", |
| ReadTimeoutStr: "5s", |
| }, |
| FilterChains: []model.FilterChain{ |
| { |
| FilterChainMatch: model.FilterChainMatch{ |
| Domains: []string{ |
| "api.dubbo.com", |
| "api.pixiu.com", |
| }, |
| }, |
| Filters: []model.Filter{ |
| { |
| Name: "dgp.filters.http_connect_manager", |
| Config: model.HttpConnectionManager{ |
| RouteConfig: model.RouteConfiguration{ |
| Routes: []model.Router{ |
| { |
| Match: model.RouterMatch{ |
| Prefix: "/api/v1", |
| Headers: []model.HeaderMatcher{ |
| {Name: "X-DGP-WAY", |
| Value: "dubbo", |
| }, |
| }, |
| }, |
| Route: model.RouteAction{ |
| Cluster: "test_dubbo", |
| ClusterNotFoundResponseCode: 505, |
| Cors: model.CorsPolicy{ |
| AllowOrigin: []string{ |
| "*", |
| }, |
| Enabled: true, |
| }, |
| }, |
| }, |
| }, |
| }, |
| HTTPFilters: []model.HTTPFilter{ |
| { |
| Name: "dgp.filters.http.api", |
| Config: interface{}(nil), |
| }, |
| { |
| Name: "dgp.filters.http.router", |
| Config: interface{}(nil), |
| }, |
| { |
| Name: "dgp.filters.http_transfer_dubbo", |
| Config: interface{}(nil), |
| }, |
| }, |
| ServerName: "test_http_dubbo", |
| GenerateRequestID: false, |
| }, |
| }, |
| }, |
| }, |
| }, |
| }, |
| }, |
| Clusters: []*model.Cluster{ |
| { |
| Name: "test_dubbo", |
| TypeStr: "EDS", |
| Type: model.EDS, |
| LbStr: "RoundRobin", |
| Registries: map[string]model.Registry{ |
| "zookeeper": { |
| Timeout: "3s", |
| Address: "127.0.0.1:2182", |
| Username: "", |
| Password: "", |
| }, |
| "consul": { |
| Timeout: "3s", |
| Address: "127.0.0.1:8500", |
| }, |
| }, |
| }, |
| }, |
| TimeoutConfig: model.TimeoutConfig{ |
| ConnectTimeoutStr: "5s", |
| RequestTimeoutStr: "10s", |
| }, |
| ShutdownConfig: &model.ShutdownConfig{ |
| Timeout: "60s", |
| StepTimeout: "10s", |
| RejectPolicy: "immediacy", |
| }, |
| PprofConf: model.PprofConf{ |
| Enable: true, |
| Address: model.Address{ |
| SocketAddress: model.SocketAddress{ |
| Address: "0.0.0.0", |
| Port: 6060, |
| }, |
| }, |
| }, |
| }, |
| } |
| retCode := m.Run() |
| os.Exit(retCode) |
| } |
| |
| func TestLoad(t *testing.T) { |
| conf := Load("conf_test.yaml") |
| assert.Equal(t, 1, len(conf.StaticResources.Listeners)) |
| assert.Equal(t, 1, len(conf.StaticResources.Clusters)) |
| assert.Equal(t, *conf, b) |
| } |
| |
| func TestStruct2JSON(t *testing.T) { |
| if bytes, err := json.Marshal(b); err != nil { |
| t.Fatal(err) |
| } else { |
| t.Log(string(bytes)) |
| } |
| } |