blob: 88bd56144fb50408e6068886aae4610084a5bf67 [file] [log] [blame]
Daniele Rossid68b0b72019-10-31 11:36:05 +01001/*
2 * Copyright 2019-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package core
17
18import (
19 "context"
20 "errors"
Divya Desai660dbba2019-10-16 07:06:49 +000021 "fmt"
Daniele Rossid68b0b72019-10-31 11:36:05 +010022 "github.com/opencord/voltha-go/ro_core/config"
23 "github.com/opencord/voltha-lib-go/v2/pkg/db/kvstore"
24 grpcserver "github.com/opencord/voltha-lib-go/v2/pkg/grpc"
25 "github.com/opencord/voltha-lib-go/v2/pkg/log"
Divya Desai660dbba2019-10-16 07:06:49 +000026 "github.com/opencord/voltha-lib-go/v2/pkg/mocks"
Scott Baker555307d2019-11-04 08:58:01 -080027 ic "github.com/opencord/voltha-protos/v2/go/inter_container"
Daniele Rossid68b0b72019-10-31 11:36:05 +010028 "github.com/phayes/freeport"
29 "github.com/stretchr/testify/assert"
Daniele Rossid68b0b72019-10-31 11:36:05 +010030 "testing"
31)
32
33type roCore struct {
34 kvClient kvstore.Client
35 config *config.ROCoreFlags
36 halted bool
37 exitChannel chan int
38 grpcServer *grpcserver.GrpcServer
39 core *Core
40 //For test
41 receiverChannels []<-chan *ic.InterContainerMessage
42}
43
44func newROCore(cf *config.ROCoreFlags) *roCore {
45 var roCoreV roCore
46 roCoreV.config = cf
47 roCoreV.halted = false
48 roCoreV.exitChannel = make(chan int, 1)
49 roCoreV.receiverChannels = make([]<-chan *ic.InterContainerMessage, 0)
50 return &roCoreV
51}
52
53func newKVClient(storeType string, address string, timeout int) (kvstore.Client, error) {
54
55 log.Infow("kv-store-type", log.Fields{"store": storeType})
56 switch storeType {
57 case "consul":
58 return kvstore.NewConsulClient(address, timeout)
59 case "etcd":
60 return kvstore.NewEtcdClient(address, timeout)
61 }
62 return nil, errors.New("unsupported-kv-store")
63}
64
65func MakeTestNewCore() (*config.ROCoreFlags, *roCore) {
66
Divya Desai660dbba2019-10-16 07:06:49 +000067 clientPort, err := freeport.GetFreePort()
68 if err == nil {
69 peerPort, err := freeport.GetFreePort()
70 if err != nil {
71 log.Fatal(err)
72 }
73 etcdServer := mocks.StartEtcdServer(mocks.MKConfig("voltha.mock.test", clientPort, peerPort, "voltha.lib.mocks.etcd", "error"))
74 if etcdServer == nil {
75 log.Fatal("Embedded server failed to start")
76 }
77 clientAddr := fmt.Sprintf("localhost:%d", clientPort)
Daniele Rossid68b0b72019-10-31 11:36:05 +010078
79 roCoreFlgs := config.NewROCoreFlags()
80 roC := newROCore(roCoreFlgs)
81 if (roC != nil) && (roCoreFlgs != nil) {
Divya Desai660dbba2019-10-16 07:06:49 +000082 cli, err := newKVClient("etcd", clientAddr, 5)
Daniele Rossid68b0b72019-10-31 11:36:05 +010083 if err == nil {
84 roC.kvClient = cli
85 return roCoreFlgs, roC
86 }
Divya Desai660dbba2019-10-16 07:06:49 +000087 if err != nil {
88 etcdServer.Stop()
89 log.Fatal("Failed to create an Etcd client")
90 }
91
Daniele Rossid68b0b72019-10-31 11:36:05 +010092 }
93 }
94 return nil, nil
95}
96
97func TestNewCore(t *testing.T) {
98
99 roCoreFlgs, roC := MakeTestNewCore()
100 assert.NotNil(t, roCoreFlgs)
101 assert.NotNil(t, roC)
102 core := NewCore("ro_core", roCoreFlgs, roC.kvClient)
103 assert.NotNil(t, core)
104}
105
106func TestNewCoreStartStop(t *testing.T) {
107
108 var ctx context.Context
109
110 roCoreFlgs, roC := MakeTestNewCore()
111 assert.NotNil(t, roCoreFlgs)
112 assert.NotNil(t, roC)
113 core := NewCore("ro_core", roCoreFlgs, roC.kvClient)
114 assert.NotNil(t, core)
115
116 core.Start(ctx)
117 core.Stop(ctx)
118}