opensnitch/ui/tests/dialogs/test_preferences.py
2022-01-14 01:25:56 +01:00

142 lines
6 KiB
Python

#
# pytest -v tests/dialogs/test_ruleseditor.py
#
import os
import time
import json
from PyQt5 import QtCore, QtWidgets, QtGui
from opensnitch.config import Config
from opensnitch.dialogs.preferences import PreferencesDialog
class TestPreferences():
@classmethod
def reset_settings(self):
try:
os.remove(os.environ['HOME'] + "/.config/opensnitch/settings.conf")
except Exception:
pass
@classmethod
def setup_method(self):
white_icon = QtGui.QIcon("../res/icon-white.svg")
self.reset_settings()
self.prefs = PreferencesDialog(appicon=white_icon)
self.prefs.show()
def run(self, qtbot):
def handle_dialog():
qtbot.mouseClick(self.prefs.applyButton, QtCore.Qt.LeftButton)
qtbot.mouseClick(self.prefs.acceptButton, QtCore.Qt.LeftButton)
QtCore.QTimer.singleShot(500, handle_dialog)
self.prefs.exec_()
def test_save_popups_settings(self, qtbot):
""" Test saving UI related settings.
"""
qtbot.addWidget(self.prefs)
self.prefs.comboUIAction.setCurrentIndex(Config.ACTION_ALLOW_IDX)
self.prefs.comboUITarget.setCurrentIndex(2)
self.prefs.comboUIDuration.setCurrentIndex(4)
self.prefs.comboUIDialogPos.setCurrentIndex(2)
self.prefs.spinUITimeout.setValue(30)
self.prefs.showAdvancedCheck.setChecked(True)
self.prefs.uidCheck.setChecked(True)
self.run(qtbot)
assert self.prefs._cfg.getInt(self.prefs._cfg.DEFAULT_ACTION_KEY) == Config.ACTION_ALLOW_IDX and self.prefs.comboUIAction.currentText() == Config.ACTION_ALLOW
assert self.prefs._cfg.getInt(self.prefs._cfg.DEFAULT_TARGET_KEY) == 2
assert self.prefs._cfg.getInt(self.prefs._cfg.DEFAULT_DURATION_KEY) == 4
assert self.prefs._cfg.getInt(self.prefs._cfg.DEFAULT_TIMEOUT_KEY) == 30
assert self.prefs._cfg.getInt(self.prefs._cfg.DEFAULT_POPUP_POSITION) == 2
assert self.prefs._cfg.getBool(self.prefs._cfg.DEFAULT_POPUP_ADVANCED) == True
assert self.prefs._cfg.getBool(self.prefs._cfg.DEFAULT_POPUP_ADVANCED_UID) == True
def test_save_ui_settings(self, qtbot):
self.prefs.checkUIRules.setChecked(True)
self.prefs.comboUIRules.setCurrentIndex(1)
self.prefs.checkHideNode.setChecked(False)
self.prefs.checkHideProto.setChecked(False)
self.run(qtbot)
assert self.prefs._cfg.getBool(self.prefs._cfg.DEFAULT_IGNORE_RULES) == True and self.prefs._cfg.getInt(self.prefs._cfg.DEFAULT_IGNORE_TEMPORARY_RULES) == 1
cols = self.prefs._cfg.getSettings(Config.STATS_SHOW_COLUMNS)
assert cols == ['0','2','3','5','6']
def test_save_node_settings(self, qtbot, capsys):
self.prefs.comboNodeAction.setCurrentIndex(Config.ACTION_ALLOW_IDX)
self.prefs.comboNodeMonitorMethod.setCurrentIndex(2)
self.prefs.comboNodeLogLevel.setCurrentIndex(5)
self.prefs.checkInterceptUnknown.setChecked(True)
self.prefs.tabWidget.setCurrentIndex(self.prefs.TAB_NODES)
self.prefs._node_needs_update = True
self.run(qtbot)
assert len(self.prefs._notifications_sent) == 1
for n in self.prefs._notifications_sent:
conf = json.loads(self.prefs._notifications_sent[n].data)
assert conf['InterceptUnknown'] == True
assert conf['ProcMonitorMethod'] == "audit"
assert conf['LogLevel'] == 5
assert conf['DefaultAction'] == "allow"
# TODO: click on the QMessageDialog
#
# def test_save_db_settings(self, qtbot, monkeypatch, capsys):
# self.prefs.comboDBType.setCurrentIndex(1)
# self.prefs.dbLabel.setText('/tmp/test.db')
#
# def handle_dialog():
# qtbot.mouseClick(self.prefs.applyButton, QtCore.Qt.LeftButton)
# # after saving the settings, a warning dialog must appear, informing
# # the user to restart the GUI
# time.sleep(.5)
# msgbox = QtWidgets.QApplication.activeModalWidget()
# try:
# assert msgbox != None
# okBtn = msgbox.button(QtWidgets.QMessageBox.Ok)
# qtbot.mouseClick(okBtn, QtCore.Qt.LeftButton)
# except Exception as e:
# print("test_save_db_Settings() exception:", e)
# qtbot.mouseClick(self.prefs.acceptButton, QtCore.Qt.LeftButton)
#
# QtCore.QTimer.singleShot(500, handle_dialog)
# self.prefs.exec_()
# assert self.prefs._cfg.getInt(Config.DEFAULT_DB_TYPE_KEY) == 1
# assert self.prefs._cfg.getSettings(Config.DEFAULT_DB_FILE_KEY) == '/tmp/test.db'
def test_load_ui_settings(self, qtbot, capsys):
""" reTest saved settings (load_settings()).
On dialog show up the widgets must be configured properly, with the settings
configured in previous tests.
"""
self.prefs.checkUIRules.setChecked(False)
self.prefs.comboUIRules.setCurrentIndex(0)
self.prefs.comboUITarget.setCurrentIndex(0)
self.prefs.comboUIDuration.setCurrentIndex(0)
self.prefs.checkHideNode.setChecked(True)
self.prefs.checkHideProto.setChecked(True)
def handle_dialog():
qtbot.mouseClick(self.prefs.cancelButton, QtCore.Qt.LeftButton)
QtCore.QTimer.singleShot(500, handle_dialog)
self.prefs.exec_()
self.prefs.show()
print(self.prefs._cfg.getBool(self.prefs._cfg.DEFAULT_IGNORE_RULES))
assert self.prefs.comboUIAction.currentIndex() == Config.ACTION_ALLOW_IDX and self.prefs.comboUIAction.currentText() == Config.ACTION_ALLOW
assert self.prefs.checkUIRules.isChecked() == True
assert self.prefs.comboUIRules.currentIndex() == 1
assert self.prefs.comboUITarget.currentIndex() == 2
assert self.prefs.comboUIDuration.currentIndex() == 4 and self.prefs.comboUIDuration.currentText() == Config.DURATION_30m
assert self.prefs.comboUIDialogPos.currentIndex() == 2
assert self.prefs.spinUITimeout.value() == 30