[SEBA-836] BBSim Reflector
Change-Id: Ib4ae5a2c24880dc62209bebb81188eca5f57865d
diff --git a/internal/bbr/devices/validate.go b/internal/bbr/devices/validate.go
new file mode 100644
index 0000000..cb2551f
--- /dev/null
+++ b/internal/bbr/devices/validate.go
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * 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 devices
+
+import (
+ "context"
+ "fmt"
+ "github.com/opencord/bbsim/api/bbsim"
+ log "github.com/sirupsen/logrus"
+ "google.golang.org/grpc"
+ "time"
+)
+
+func ValidateAndClose(olt *OltMock) {
+
+ // connect to the BBSim control APIs to check that all the ONUs are in the correct state
+ client, conn := ApiConnect(olt.BBSimIp, olt.BBSimApiPort)
+ defer conn.Close()
+
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+
+ onus, err := client.GetONUs(ctx, &bbsim.Empty{})
+
+ if err != nil {
+ log.WithFields(log.Fields{
+ "error": err,
+ }).Fatalf("Can't reach BBSim API")
+ }
+
+ expectedState := "dhcp_ack_received"
+
+ res := true
+ for _, onu := range onus.Items {
+ if onu.InternalState != expectedState {
+ res = false
+ log.WithFields(log.Fields{
+ "OnuSN": onu.SerialNumber,
+ "OnuId": onu.ID,
+ "InternalState": onu.InternalState,
+ "ExpectedSatte": expectedState,
+ }).Error("Not matching expected state")
+ }
+ }
+
+ if res == true {
+ log.WithFields(log.Fields{
+ "ExpectedState": expectedState,
+ }).Infof("%d ONUs matching expected state", len(onus.Items))
+ }
+
+ olt.conn.Close()
+}
+
+func ApiConnect(ip string, port string) (bbsim.BBSimClient, *grpc.ClientConn) {
+ server := fmt.Sprintf("%s:%s", ip, port)
+ conn, err := grpc.Dial(server, grpc.WithInsecure())
+
+ if err != nil {
+ log.Fatalf("did not connect: %v", err)
+ return nil, conn
+ }
+ return bbsim.NewBBSimClient(conn), conn
+}