blob: f572f098c24de9e5bbd972cf3d92ff5f6ff5aa98 [file] [log] [blame]
/*
* 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 mocks provides the mocks for openolt-adapter.
package mocks
import (
"context"
"errors"
"fmt"
"github.com/opencord/voltha-lib-go/v5/pkg/kafka"
"github.com/opencord/voltha-protos/v4/go/voltha"
)
// MockCoreProxy mocks the CoreProxy interface
type MockCoreProxy struct {
// Values to be used in test can reside inside this structure
// TODO store relevant info in this, use this info for negative and positive tests
Devices map[string]*voltha.Device
DevicePorts map[string][]*voltha.Port
}
// UpdateCoreReference mock updatesCoreReference
func (mcp *MockCoreProxy) UpdateCoreReference(deviceID string, coreReference string) {
panic("implement me")
}
// DeleteCoreReference mock DeleteCoreReference function
func (mcp *MockCoreProxy) DeleteCoreReference(deviceID string) {
panic("implement me")
}
// GetCoreTopic implements mock GetCoreTopic
func (mcp *MockCoreProxy) GetCoreTopic(deviceID string) kafka.Topic {
panic("implement me")
}
// GetAdapterTopic implements mock GetAdapterTopic
func (mcp *MockCoreProxy) GetAdapterTopic(args ...string) kafka.Topic {
panic("implement me")
}
// RegisterAdapter implements mock RegisterAdapter
func (mcp *MockCoreProxy) RegisterAdapter(ctx context.Context, adapter *voltha.Adapter,
deviceTypes *voltha.DeviceTypes) error {
if ctx == nil || adapter == nil || deviceTypes == nil {
return errors.New("registerAdapter func parameters cannot be nil")
}
return nil
}
// DeviceUpdate implements mock DeviceUpdate
func (mcp *MockCoreProxy) DeviceUpdate(ctx context.Context, device *voltha.Device) error {
if device.Id == "" {
return errors.New("no Device")
}
return nil
}
// PortCreated implements mock PortCreated
func (mcp *MockCoreProxy) PortCreated(ctx context.Context, deviceID string, port *voltha.Port) error {
if deviceID == "" {
return errors.New("no deviceID")
}
if port.Type > 7 {
return errors.New("invalid porttype")
}
return nil
}
// PortsStateUpdate implements mock PortsStateUpdate
func (mcp *MockCoreProxy) PortsStateUpdate(ctx context.Context, deviceID string, portTypeFilter uint32, operStatus voltha.OperStatus_Types) error {
if deviceID == "" {
return errors.New("no Device")
}
return nil
}
// DeleteAllPorts implements mock DeleteAllPorts
func (mcp *MockCoreProxy) DeleteAllPorts(ctx context.Context, deviceID string) error {
if deviceID == "" {
return errors.New("no Device id")
}
return nil
}
// GetDevicePort implements mock GetDevicePort
func (mcp *MockCoreProxy) GetDevicePort(ctx context.Context, deviceID string, portID uint32) (*voltha.Port, error) {
for _, port := range mcp.DevicePorts[deviceID] {
if port.PortNo == portID {
return port, nil
}
}
return nil, errors.New("device/port not found")
}
// ListDevicePorts implements mock ListDevicePorts
func (mcp *MockCoreProxy) ListDevicePorts(ctx context.Context, deviceID string) ([]*voltha.Port, error) {
ports, have := mcp.DevicePorts[deviceID]
if !have {
return nil, errors.New("device id not found")
}
return ports, nil
}
// DeviceStateUpdate implements mock DeviceStateUpdate
func (mcp *MockCoreProxy) DeviceStateUpdate(ctx context.Context, deviceID string,
connStatus voltha.ConnectStatus_Types, operStatus voltha.OperStatus_Types) error {
if deviceID == "" {
return errors.New("no Device id")
}
return nil
}
// ChildDeviceDetected implements mock ChildDeviceDetected
func (mcp *MockCoreProxy) ChildDeviceDetected(ctx context.Context, parentdeviceID string, parentPortNo int,
childDeviceType string, channelID int, vendorID string, serialNumber string, onuID int64) (*voltha.Device, error) {
if parentdeviceID == "" {
return nil, errors.New("no deviceID")
}
for k, v := range mcp.Devices {
if k == "olt" {
return v, nil
}
}
return nil, nil
}
// ChildDevicesLost implements mock ChildDevicesLost.
func (mcp *MockCoreProxy) ChildDevicesLost(ctx context.Context, parentdeviceID string) error {
//panic("implement me")
if parentdeviceID == "" {
return errors.New("no device id")
}
return nil
}
// ChildDevicesDetected implements mock ChildDevicesDetecte
func (mcp *MockCoreProxy) ChildDevicesDetected(ctx context.Context, parentdeviceID string) error {
if parentdeviceID == "" {
return errors.New("no device id")
}
return nil
}
// GetDevice implements mock GetDevice
func (mcp *MockCoreProxy) GetDevice(ctx context.Context, parentdeviceID string, deviceID string) (*voltha.Device, error) {
if parentdeviceID == "" || deviceID == "" {
return &voltha.Device{}, errors.New("no deviceID")
}
for k, v := range mcp.Devices {
if k == "olt" {
return v, nil
}
}
return nil, errors.New("device detection failed")
}
// GetChildDevice implements mock GetChildDevice
func (mcp *MockCoreProxy) GetChildDevice(ctx context.Context, parentdeviceID string, kwargs map[string]interface{}) (*voltha.Device, error) {
if parentdeviceID == "" {
return nil, errors.New("device detection failed")
}
onuID := kwargs["onu_id"]
var onuDevice *voltha.Device
for _, val := range mcp.Devices {
if val.GetId() == fmt.Sprintf("%v", onuID) {
onuDevice = val
break
}
}
if onuDevice != nil {
return onuDevice, nil
}
//return &voltha.Device{}, nil
return nil, errors.New("device detection failed")
}
// GetChildDevices implements mock GetChildDevices
func (mcp *MockCoreProxy) GetChildDevices(ctx context.Context, parentdeviceID string) (*voltha.Devices, error) {
if parentdeviceID == "" {
return nil, errors.New("no deviceID")
}
onuDevices := make([]*voltha.Device, 0)
for _, val := range mcp.Devices {
if val != nil {
onuDevices = append(onuDevices, val)
}
}
deviceList := &voltha.Devices{Items: onuDevices}
if len(deviceList.Items) > 0 {
return deviceList, nil
}
return nil, errors.New("device detection failed")
}
// SendPacketIn implements mock SendPacketIn
func (mcp *MockCoreProxy) SendPacketIn(ctx context.Context, deviceID string, port uint32, pktPayload []byte) error {
if deviceID == "" {
return errors.New("no Device ID")
}
return nil
}
// DeviceReasonUpdate implements mock SendPacketIn
func (mcp *MockCoreProxy) DeviceReasonUpdate(ctx context.Context, deviceID string, reason string) error {
if deviceID == "" {
return errors.New("no Device ID")
}
return nil
}
// DevicePMConfigUpdate implements mock DevicePMConfigUpdate
func (mcp *MockCoreProxy) DevicePMConfigUpdate(ctx context.Context, pmConfigs *voltha.PmConfigs) error {
return nil
}
// PortStateUpdate implements mock PortStateUpdate
func (mcp *MockCoreProxy) PortStateUpdate(ctx context.Context, deviceID string, pType voltha.Port_PortType, portNo uint32,
operStatus voltha.OperStatus_Types) error {
if deviceID == "" {
return errors.New("no Device")
}
return nil
}