blob: a7f8a7f2af1ff549d7fd83df02e58249c326154f [file] [log] [blame]
Gilles Depatie84cb1e72018-10-26 12:41:33 -04001#
2# Copyright 2018 the original author or authors.
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#
16
17"""
Gilles Depatie1be639b2018-12-06 10:51:08 -050018vOLT-HA Pre-provisioning Test Case module
Gilles Depatie84cb1e72018-10-26 12:41:33 -040019"""
20
21import time
Gilles Depatie84cb1e72018-10-26 12:41:33 -040022import testCaseUtils
Gilles Depatie1be639b2018-12-06 10:51:08 -050023import logging
Gilles Depatie84cb1e72018-10-26 12:41:33 -040024
Gilles Depatie0bf31352019-02-04 13:48:41 -050025
Gilles Depatie84cb1e72018-10-26 12:41:33 -040026class Preprovisioning(object):
27
28 """
29 This class implements voltha pre-provisioning test
30 """
31
32 def __init__(self):
Gilles Depatie0bf31352019-02-04 13:48:41 -050033 self.dirs = dict()
34 self.dirs['log'] = None
35 self.dirs['root'] = None
36 self.dirs['voltha'] = None
Gilles Depatie84cb1e72018-10-26 12:41:33 -040037
38 self.__oltIpAddress = None
39 self.__oltPort = None
Gilles Depatie9651e462018-11-21 15:58:33 -050040 self.__oltType = None
41 self.__onuType = None
Gilles Depatie84cb1e72018-10-26 12:41:33 -040042 self.__fields = []
Gilles Depatie9651e462018-11-21 15:58:33 -050043 self.__oltDeviceId = None
Gilles Depatie84cb1e72018-10-26 12:41:33 -040044
Gilles Depatie0bf31352019-02-04 13:48:41 -050045 def p_set_log_dirs(self, log_dir):
46 testCaseUtils.config_dirs(self, log_dir)
Gilles Depatie84cb1e72018-10-26 12:41:33 -040047
Gilles Depatie0bf31352019-02-04 13:48:41 -050048 def p_configure(self, olt_ip_address, olt_port, olt_type, onu_type):
49 self.__oltIpAddress = olt_ip_address
50 self.__oltPort = olt_port
51 self.__oltType = olt_type
52 self.__onuType = onu_type
Gilles Depatie84cb1e72018-10-26 12:41:33 -040053
Gilles Depatie0bf31352019-02-04 13:48:41 -050054 def preprovision_olt(self):
Gilles Depatie1be639b2018-12-06 10:51:08 -050055 logging.info('Do PROVISIONING')
Gilles Depatie0bf31352019-02-04 13:48:41 -050056 testCaseUtils.send_command_to_voltha_cli(testCaseUtils.get_dir(self, 'log'),
57 'voltha_preprovision_olt.log', 'preprovision_olt -t ponsim_olt -H %s:%s' %
58 (self.__oltIpAddress, self.__oltPort))
Gilles Depatie84cb1e72018-10-26 12:41:33 -040059 time.sleep(5)
Gilles Depatie9651e462018-11-21 15:58:33 -050060
61 def status_should_be_success_after_preprovision_command(self):
Gilles Depatie1be639b2018-12-06 10:51:08 -050062 statusLines = testCaseUtils.get_fields_from_grep_command(self, 'success', 'voltha_preprovision_olt.log')
63 assert statusLines, 'Preprovision Olt command should have returned success but did not'
Gilles Depatie9651e462018-11-21 15:58:33 -050064
65 def query_devices_before_enabling(self):
Gilles Depatie0bf31352019-02-04 13:48:41 -050066 testCaseUtils.send_command_to_voltha_cli(testCaseUtils.get_dir(self, 'log'),
67 'voltha_devices_before_enable.log', 'devices')
68 testCaseUtils.print_log_file(self, 'voltha_devices_before_enable.log')
Gilles Depatie84cb1e72018-10-26 12:41:33 -040069 time.sleep(5)
Gilles Depatie9651e462018-11-21 15:58:33 -050070
71 def check_olt_fields_before_enabling(self):
Gilles Depatie1be639b2018-12-06 10:51:08 -050072 statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__oltType, 'voltha_devices_before_enable.log')
73 assert statusLines, 'No Olt listed under devices'
Gilles Depatie2e683692019-02-22 16:06:52 -050074 self.__fields = testCaseUtils.parse_fields(statusLines, '|')
Gilles Depatie84cb1e72018-10-26 12:41:33 -040075 self.__oltDeviceId = self.__fields[1].strip()
Gilles Depatie1be639b2018-12-06 10:51:08 -050076 logging.debug("OLT device id = %s" % self.__oltDeviceId)
Gilles Depatie9651e462018-11-21 15:58:33 -050077 adminState = self.__fields[3].strip()
78 assert adminState == 'PREPROVISIONED', 'Admin State not PREPROVISIONED'
79 hostPort = self.__fields[4].strip()
80 assert hostPort, 'hostPort field is empty'
81 hostPortFields = hostPort.split(":")
82 assert hostPortFields[0].strip() == self.__oltIpAddress or hostPortFields[1] == str(self.__oltPort), \
83 'Olt IP or Port does not match'
84
Gilles Depatie0bf31352019-02-04 13:48:41 -050085 def check_states(self, dev_type):
Gilles Depatie9651e462018-11-21 15:58:33 -050086 result = True
87 adminState = self.__fields[7].strip()
Gilles Depatie0bf31352019-02-04 13:48:41 -050088 assert adminState == 'ENABLED', 'Admin State of %s not ENABLED' % dev_type
89 operatorStatus = self.__fields[8].strip()
90 assert operatorStatus == 'ACTIVE', 'Operator Status of %s not ACTIVE' % dev_type
Gilles Depatie9651e462018-11-21 15:58:33 -050091 connectStatus = self.__fields[9].strip()
Gilles Depatie0bf31352019-02-04 13:48:41 -050092 assert connectStatus == 'REACHABLE', 'Connect Status of %s not REACHABLE' % dev_type
Gilles Depatie9651e462018-11-21 15:58:33 -050093 return result
94
95 def check_olt_fields_after_enabling(self):
Gilles Depatie1be639b2018-12-06 10:51:08 -050096 statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__oltType, 'voltha_devices_after_enable.log')
97 assert statusLines, 'No Olt listed under devices'
Gilles Depatie2e683692019-02-22 16:06:52 -050098 self.__fields = testCaseUtils.parse_fields(statusLines, '|')
Gilles Depatie9651e462018-11-21 15:58:33 -050099 assert self.check_states(self.__oltType), 'States of %s does match expected' % self.__oltType
100 hostPort = self.__fields[11].strip()
101 assert hostPort, 'hostPort field is empty'
102 hostPortFields = hostPort.split(":")
103 assert hostPortFields[0] == self.__oltIpAddress or hostPortFields[1] == str(self.__oltPort), \
104 'Olt IP or Port does not match'
105
106 def check_onu_fields_after_enabling(self):
Gilles Depatie1be639b2018-12-06 10:51:08 -0500107 statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__onuType, 'voltha_devices_after_enable.log')
108 assert statusLines, 'No Onu listed under devices'
109 lines = statusLines.splitlines()
Gilles Depatie9651e462018-11-21 15:58:33 -0500110 lenLines = len(lines)
111 assert lenLines == 1, 'Fixed single onu does not match, ONU Count was %d' % lenLines
112 for line in lines:
Gilles Depatie2e683692019-02-22 16:06:52 -0500113 self.__fields = testCaseUtils.parse_fields(line, '|')
Gilles Depatie0bf31352019-02-04 13:48:41 -0500114 assert (self.check_states(self.__onuType) is True), 'States of %s does match expected' % self.__onuType
Gilles Depatie84cb1e72018-10-26 12:41:33 -0400115
116 def enable(self):
Gilles Depatie1be639b2018-12-06 10:51:08 -0500117 logging.info('Enable %s OLT device' % self.__oltDeviceId)
Gilles Depatie0bf31352019-02-04 13:48:41 -0500118 testCaseUtils.send_command_to_voltha_cli(testCaseUtils.get_dir(self, 'log'),
119 'voltha_enable.log', 'enable ' + self.__oltDeviceId)
Gilles Depatie84cb1e72018-10-26 12:41:33 -0400120
Gilles Depatie9651e462018-11-21 15:58:33 -0500121 def status_should_be_success_after_enable_command(self):
Gilles Depatie1be639b2018-12-06 10:51:08 -0500122 statusLines = testCaseUtils.get_fields_from_grep_command(self, 'success', 'voltha_enable.log')
123 assert statusLines, 'Enable command should have returned success but did not'
Gilles Depatie9651e462018-11-21 15:58:33 -0500124
125 def query_devices_after_enabling(self):
Gilles Depatie0bf31352019-02-04 13:48:41 -0500126 testCaseUtils.send_command_to_voltha_cli(testCaseUtils.get_dir(self, 'log'),
127 'voltha_devices_after_enable.log', 'devices')
128 testCaseUtils.print_log_file(self, 'voltha_devices_after_enable.log')
Gilles Depatie84cb1e72018-10-26 12:41:33 -0400129
Gilles Depatie0bf31352019-02-04 13:48:41 -0500130
131def run_test(olt_ip_address, olt_port, olt_type, onu_type, log_dir):
Gilles Depatie84cb1e72018-10-26 12:41:33 -0400132 preprovisioning = Preprovisioning()
Gilles Depatie0bf31352019-02-04 13:48:41 -0500133 preprovisioning.p_set_log_dirs(log_dir)
134 preprovisioning.p_configure(olt_ip_address, olt_port, olt_type, onu_type)
135 preprovisioning.preprovision_olt()
Gilles Depatie9651e462018-11-21 15:58:33 -0500136 preprovisioning.status_should_be_success_after_preprovision_command()
137 preprovisioning.query_devices_before_enabling()
138 preprovisioning.check_olt_fields_before_enabling()
Gilles Depatie84cb1e72018-10-26 12:41:33 -0400139 preprovisioning.enable()
Gilles Depatie9651e462018-11-21 15:58:33 -0500140 preprovisioning.status_should_be_success_after_enable_command()
141 preprovisioning.query_devices_after_enabling()
142 preprovisioning.check_olt_fields_after_enabling()
143 preprovisioning.check_onu_fields_after_enabling()