#!/usr/bin/env python3
#
# Copyright (C) 2020 Francois Mertz fireboxled@gmail.com
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
import re
import os
import unittest
import configparser
from psutil import process_iter
from vyos.configsession import ConfigSession, ConfigSessionError
from vyos.util import read_file
base_path = ['system', 'display']
"""
system display model (sdec|ezio)
system display show host (cpu|cpu-all|cpu-hist|disk|load-hist|memory|proc|uptime)
network interface alias
units (bps|Bps|pps)
clock (big|mini|date-time)
title
system display time
system display hello
system display bye
system display disabled
"""
class SystemDisplayTest(unittest.TestCase):
def setUp(self):
self.session = ConfigSession(os.getpid())
def tearDown(self):
self.session.delete(base_path)
self.session.commit()
del self.session
def test_system_display(self):
# configure some system display
self.session.set(base_path + ['hello', 'Welcome to VyOS'])
self.session.set(base_path + ['bye', 'Bye from VyOS'])
self.session.set(base_path + ['time', '30'])
# check validate() - a model and a show are required
with self.assertRaises(ConfigSessionError):
self.session.commit()
self.session.set(base_path + ['model', 'ezio'])
# check validate() - a show required
with self.assertRaises(ConfigSessionError):
self.session.commit()
self.session.set(base_path + ['show', 'clock', 'big'])
self.session.set(base_path + ['show', 'network', 'units', 'pps'])
self.session.set(base_path + ['show', 'network', 'interface', 'eth0', 'alias', 'WAN'])
self.session.set(base_path + ['show', 'network', 'interface', 'eth1', 'alias', 'LAN'])
self.session.set(base_path + ['show', 'network', 'interface', 'eth2', 'alias', 'WIFI'])
# One too many
self.session.set(base_path + ['show', 'network', 'interface', 'eth3'])
# check validate() - more then 3 interfaces
with self.assertRaises(ConfigSessionError):
self.session.commit()
self.session.delete(base_path + ['show', 'network', 'interface', 'eth3'])
# commit changes
self.session.commit()
# load up ini-styled LCDd.conf
LCDd_conf = configparser.ConfigParser()
LCDd_conf.read('/run/LCDd/LCDd.lo.conf')
# Check settings made it into LCDd.conf
self.assertTrue(LCDd_conf['server']['Driver'] == 'hd44780')
self.assertTrue(LCDd_conf['server']['Hello'] == '"Welcome to VyOS"')
self.assertTrue(LCDd_conf['server']['GoodBye'] == '"Bye from VyOS"')
self.assertTrue(LCDd_conf['server']['WaitTime'] == '30')
self.assertTrue(LCDd_conf['hd44780']['ConnectionType'] == 'ezio')
self.assertTrue(LCDd_conf['hd44780']['Keypad'] == 'yes')
self.assertTrue(LCDd_conf['hd44780']['Size'] == '16x2')
self.assertTrue(LCDd_conf['hd44780']['KeyMatrix_4_1'] == 'Enter')
self.assertTrue(LCDd_conf['hd44780']['KeyMatrix_4_2'] == 'Up')
self.assertTrue(LCDd_conf['hd44780']['KeyMatrix_4_3'] == 'Down')
self.assertTrue(LCDd_conf['hd44780']['KeyMatrix_4_4'] == 'Escape')
#self.assertTrue(LCDd_conf['hd44780']['Device'] == '/dev/ttyS1')
# load up ini-styled lcdproc.conf configuration file
lcdproc_conf = configparser.ConfigParser()
lcdproc_conf.read('/run/lcdproc/lcdproc.lo.conf')
# clock
self.assertTrue(lcdproc_conf['TimeDate']['Active'] == 'false')
self.assertTrue(lcdproc_conf['BigClock']['Active'] == 'true')
self.assertTrue(lcdproc_conf['MiniClock']['Active'] == 'false')
# host
self.assertTrue(lcdproc_conf['CPU']['Active'] == 'false')
self.assertTrue(lcdproc_conf['Memory']['Active'] == 'false')
self.assertTrue(lcdproc_conf['Load']['Active'] == 'false')
# network
self.assertTrue(lcdproc_conf['Iface']['Active'] == 'true')
self.assertTrue(lcdproc_conf['Iface']['Interface0'] == 'eth0')
self.assertTrue(lcdproc_conf['Iface']['Alias0'] == 'WAN')
self.assertTrue(lcdproc_conf['Iface']['Interface1'] == 'eth1')
self.assertTrue(lcdproc_conf['Iface']['Alias1'] == 'LAN')
self.assertTrue(lcdproc_conf['Iface']['Interface2'] == 'eth2')
self.assertTrue(lcdproc_conf['Iface']['Alias2'] == 'WIFI')
self.assertTrue(lcdproc_conf['Iface']['unit'] == 'packet')
# Check if LCdd and lcdproc are running
running = 0
for p in process_iter():
if p.name() in ['lcdproc', 'LCDd']:
running += 1
# both processes running
self.assertTrue(running == 2)
if __name__ == '__main__':
unittest.main()