SEBA-122
bin/client is now cmdline app, tosca is sent to xos

Change-Id: I7bbf59569b5c96062aa1c7681708a4cf39532ae2
diff --git a/api/abstract_olt_api.proto b/api/abstract_olt_api.proto
index 72dad9b..6da61c8 100644
--- a/api/abstract_olt_api.proto
+++ b/api/abstract_olt_api.proto
@@ -20,6 +20,8 @@
    string CLLI =1;
    string VCoreIP =2;
    int32 VCorePort=3;
+   int32 Rack=4;
+   int32 Shelf=5;
 }
 message AddChassisReturn{
    string DeviceID = 1;
@@ -32,7 +34,7 @@
    fixed32 NumPorts = 5;
    bool Activate = 6;
    enum OltDriver {
-      openoltDriver = 0;
+      openoltDriver= 0;
       asfvolt16Driver=1;
       adtranDriver=2;
       tibitsDriver=3;
diff --git a/api/handler.go b/api/handler.go
index 6beba76..bb1a9b3 100644
--- a/api/handler.go
+++ b/api/handler.go
@@ -17,6 +17,7 @@
 package api
 
 import (
+	"errors"
 	"fmt"
 	"log"
 	"net"
@@ -46,8 +47,8 @@
 	if chassis != nil {
 		return &AddChassisReturn{DeviceID: chassis.CLLI}, nil
 	}
-	abstractChassis := abstract.GenerateChassis(clli)
-	phyChassis := &physical.Chassis{CLLI: clli, VCoreAddress: net.TCPAddr{IP: net.ParseIP(in.GetVCoreIP()), Port: int(in.GetVCorePort())}}
+	abstractChassis := abstract.GenerateChassis(clli, int(in.GetRack()), int(in.GetShelf()))
+	phyChassis := &physical.Chassis{CLLI: clli, VCoreAddress: net.TCPAddr{IP: net.ParseIP(in.GetVCoreIP()), Port: int(in.GetVCorePort())}, Rack: int(in.GetRack()), Shelf: int(in.GetShelf())}
 	if settings.GetDebug() {
 		output := fmt.Sprintf("%v", abstractChassis)
 		formatted := strings.Replace(output, "{", "\n{", -1)
@@ -68,6 +69,8 @@
 	clli := in.GetCLLI()
 	chassis := (*phyChassisMap)[clli]
 	if chassis == nil {
+		errString := fmt.Sprintf("There is no chassis with CLLI of %s", clli)
+		return &AddOLTChassisReturn{DeviceID: "", ChassisDeviceID: ""}, errors.New(errString)
 	}
 	oltType := in.GetType()
 	address := net.TCPAddr{IP: net.ParseIP(in.GetSlotIP()), Port: int(in.GetSlotPort())}
@@ -80,12 +83,10 @@
 	case AddOLTChassisMessage_adtran:
 	case AddOLTChassisMessage_tibit:
 	}
-
 	err := AddCard(chassis, olt)
 	if err != nil {
 		//TODO do something
 	}
-
 	return &AddOLTChassisReturn{DeviceID: in.GetHostname(), ChassisDeviceID: clli}, nil
 
 }
@@ -102,6 +103,7 @@
 
 	for i := 0; i < len(ports); i++ {
 		absPort, _ := absChassis.NextPort()
+
 		absPort.PhysPort = &ports[i]
 		//AssignTraits(&ports[i], absPort)
 	}
@@ -116,6 +118,10 @@
 	absChassisMap := models.GetAbstractChassisMap()
 	clli := in.GetCLLI()
 	chassis := (*absChassisMap)[clli]
+	if chassis == nil {
+		errString := fmt.Sprintf("There is no chassis with CLLI of %s", clli)
+		return &AddOntReturn{Success: false}, errors.New(errString)
+	}
 	err := chassis.ActivateONT(int(in.GetSlotNumber()), int(in.GetPortNumber()), int(in.GetOntNumber()), in.GetSerialNumber())
 
 	if err != nil {
diff --git a/api/handler_test.go b/api/handler_test.go
deleted file mode 100644
index 59aad10..0000000
--- a/api/handler_test.go
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- Copyright 2017 the original author or 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 api_test
-
-import (
-	"fmt"
-	"testing"
-
-	"gerrit.opencord.org/abstract-olt/api"
-	"gerrit.opencord.org/abstract-olt/models/abstract"
-	"gerrit.opencord.org/abstract-olt/models/physical"
-	"golang.org/x/net/context"
-)
-
-var clli string
-var slotHostname = "SlotOne"
-var ctx context.Context
-var server api.Server
-
-func TestHandler_CreateChassis(t *testing.T) {
-	fmt.Println("in handlerTest_CreateChassis")
-	ctx = context.Background()
-	server = api.Server{}
-	message := &api.AddChassisMessage{CLLI: "my cilli", VCoreIP: "192.168.0.1", VCorePort: 9191}
-	ret, err := server.CreateChassis(ctx, message)
-	if err != nil {
-		t.Fatalf("CreateChassis failed %v\n", err)
-	}
-	clli = ret.DeviceID
-}
-func TestHandler_CreateOLTChassis(t *testing.T) {
-	fmt.Println("in handlerTest_CreateOltChassis")
-	message := &api.AddOLTChassisMessage{CLLI: clli, SlotIP: "12.2.2.0", SlotPort: 9191,
-		Hostname: slotHostname, Type: api.AddOLTChassisMessage_edgecore}
-	ret, err := server.CreateOLTChassis(ctx, message)
-	if err != nil {
-		t.Fatalf("CreateOLTChassis failed %v\n", err)
-	}
-	fmt.Printf("CreateOLTChassis success %v\n", ret)
-}
-func TestHandler_ProvisionOnt(t *testing.T) {
-	ctx = context.Background()
-	server = api.Server{}
-	fmt.Println("in handlerTest_ProvisonOnt")
-	// this one should succeed
-	message := &api.AddOntMessage{CLLI: clli, SlotNumber: 1, PortNumber: 3, OntNumber: 2, SerialNumber: "2033029402"}
-	ret, err := server.ProvisionOnt(ctx, message)
-	if err != nil {
-		t.Fatalf("ProvisionOnt failed %v\n", err)
-	}
-	// do it again on same ont/port should fail with AllReadyActiveError
-	ret, err = server.ProvisionOnt(ctx, message)
-	if err != nil {
-		switch err.(type) {
-		case *physical.AllReadyActiveError:
-			fmt.Printf("ProvisionOnt failed as it should with %v\n", err)
-		default:
-			t.Fatalf("ProvsionOnt test failed with %v\n", err)
-		}
-
-	} else {
-		t.Fatalf("ProvsionOnt should have failed with AllReadyActiveError but didn't")
-	}
-
-	// this one should fail
-	//SlotNumber 1 hasn't been provisioned
-	message = &api.AddOntMessage{CLLI: clli, SlotNumber: 2, PortNumber: 3, OntNumber: 2, SerialNumber: "2033029402"}
-	ret, err = server.ProvisionOnt(ctx, message)
-	if err != nil {
-		switch err.(type) {
-		case *abstract.UnprovisonedPortError:
-			fmt.Printf("ProvisionOnt failed as it should with %v\n", err)
-		default:
-			t.Fatalf("ProvsionOnt test failed with %v\n", err)
-		}
-	} else {
-		t.Fatalf("ProvsionOnt should have failed but didn't")
-	}
-	fmt.Printf("ProvisionOnt success %v\n", ret)
-}
-func TestHandler_DeleteOnt(t *testing.T) {
-	ctx = context.Background()
-	server = api.Server{}
-	fmt.Println("in handlerTest_DeleteOnt")
-	// this one should succeed
-	//De-Activate ONT 3 on PONPort 0 Slot 0 on my cilli but not active
-	message := &api.DeleteOntMessage{CLLI: clli, SlotNumber: 1, PortNumber: 3, OntNumber: 2, SerialNumber: "2033029402"}
-	ret, err := server.DeleteOnt(ctx, message)
-	if err != nil {
-		t.Fatalf("DeleteOnt failed %v\n", err)
-	}
-	// This should fail with AllReadyDeactivatedError
-	ret, err = server.DeleteOnt(ctx, message)
-	if err != nil {
-		switch err.(type) {
-		case *physical.AllReadyDeactivatedError:
-			fmt.Printf("DeleteOnt failed as expected with %v\n", err)
-		default:
-			t.Fatalf("DeleteOnt failed with %v\n", err)
-		}
-	} else {
-		t.Fatal("DeleteOnt should have failed with AllReadyDeactivatedError")
-	}
-
-	// this one should fail
-	//SlotNumber 1 hasn't been provisioned
-	message = &api.DeleteOntMessage{CLLI: clli, SlotNumber: 2, PortNumber: 3, OntNumber: 2, SerialNumber: "2033029402"}
-	ret, err = server.DeleteOnt(ctx, message)
-	if err != nil {
-		switch err.(type) {
-		case *abstract.UnprovisonedPortError:
-			fmt.Printf("DeleteOnt failed as it should with %v\n", err)
-		default:
-			t.Fatalf("DeleteOnt test failed with %v\n", err)
-		}
-	} else {
-		t.Fatalf("DeleteOnt should have failed but didn't")
-	}
-	fmt.Printf("DeletenOnt success %v\n", ret)
-}