neutron-fwaas/neutron_fwaas/tests/unit/privileged/netfilter_log/test_libnetfilter_log.py

138 lines
5.4 KiB
Python

# Copyright (c) 2018 Fujitsu Limited
# All Rights Reserved.
#
# 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.
import socket
from unittest import mock
import cffi
from neutron.tests import base
from oslo_utils import importutils
import testtools
# mock for dlopen
cffi.FFI = mock.Mock()
cffi.FFI.dlopen = mock.Mock(return_value=mock.Mock())
lib_log = importutils.import_module(
'neutron_fwaas.privileged.netfilter_log.libnetfilter_log'
)
class NFLogAppTestCase(base.BaseTestCase):
def setUp(self):
self.nflog_app = lib_log.NFLogApp()
self.spawn = mock.patch('eventlet.spawn').start()
super(NFLogAppTestCase, self).setUp()
def test_register_packet_handler(self):
def fake_method():
pass
self.nflog_app.register_packet_handler(fake_method)
self.assertEqual(fake_method, self.nflog_app.callback)
def test_unregister_packet_handler(self):
def fake_method():
pass
self.nflog_app.register_packet_handler(fake_method)
self.assertEqual(fake_method, self.nflog_app.callback)
self.nflog_app.unregister_packet_handler()
self.assertIsNone(self.nflog_app.callback)
class NFLogWrapper(base.BaseTestCase):
def setUp(self):
super(NFLogWrapper, self).setUp()
lib_log.libnflog = mock.Mock()
lib_log.ffi = mock.Mock()
def test_open_failed(self):
lib_log.libnflog.nflog_open.return_value = None
handle = lib_log.NFLogWrapper.get_instance()
with testtools.ExpectedException(Exception):
handle.open()
lib_log.libnflog.nflog_open.assert_called_once_with()
lib_log.libnflog.nflog_unbind_pf.assert_not_called()
lib_log.libnflog.nflog_bind_pf.assert_not_called()
handle.close()
def test_bind_pf(self):
nflog_handle = mock.Mock()
lib_log.libnflog.nflog_open.return_value = nflog_handle
handle = lib_log.NFLogWrapper.get_instance()
handle.open()
lib_log.libnflog.nflog_open.assert_called_once_with()
calls = [mock.call(nflog_handle, socket.AF_INET),
mock.call(nflog_handle, socket.AF_INET6)]
lib_log.libnflog.nflog_unbind_pf.assert_has_calls(
calls, any_order=True)
lib_log.libnflog.nflog_bind_pf.assert_has_calls(
calls, any_order=True)
def test_bind_group_set_mode_failed(self):
nflog_handle = mock.Mock()
g_handle = mock.Mock()
lib_log.libnflog.nflog_open.return_value = nflog_handle
lib_log.libnflog.nflog_bind_group.return_value = g_handle
lib_log.libnflog.nflog_set_mode.return_value = -1
handle = lib_log.NFLogWrapper.get_instance()
with testtools.ExpectedException(Exception):
handle.open()
handle.bind_group(0)
lib_log.libnflog.nflog_open.assert_called_once_with()
lib_log.libnflog.nflog_bind_group.assert_called_once_with(
nflog_handle, 0)
lib_log.libnflog.nflog_set_mode.assert_called_once_with(
g_handle, 0x2, 0xffff)
lib_log.libnflog.nflog_callback_register.assert_not_called()
def test_bind_group_set_callback_failed(self):
nflog_handle = mock.Mock()
g_handle = mock.Mock()
lib_log.libnflog.nflog_open.return_value = nflog_handle
lib_log.libnflog.nflog_bind_group.return_value = g_handle
lib_log.libnflog.nflog_set_mode.return_value = 0
lib_log.libnflog.nflog_callback_register.return_value = -1
handle = lib_log.NFLogWrapper.get_instance()
with testtools.ExpectedException(Exception):
handle.open()
handle.bind_group(0)
lib_log.libnflog.nflog_open.assert_called_once_with()
lib_log.libnflog.nflog_bind_group.assert_called_once_with(
nflog_handle, 0)
lib_log.libnflog.nflog_set_mode.assert_called_once_with(
g_handle, 0x2, 0xffff)
lib_log.libnflog.nflog_callback_register.assert_called_once_with(
g_handle, handle.cb, lib_log.ffi.NULL)
def test_bind_group_pass(self):
nflog_handle = mock.Mock()
g_handle = mock.Mock()
lib_log.libnflog.nflog_open.return_value = nflog_handle
lib_log.libnflog.nflog_bind_group.return_value = g_handle
lib_log.libnflog.nflog_set_mode.return_value = 0
lib_log.libnflog.nflog_callback_register.return_value = 0
handle = lib_log.NFLogWrapper.get_instance()
handle.open()
handle.bind_group(0)
lib_log.libnflog.nflog_open.assert_called_once_with()
lib_log.libnflog.nflog_bind_group.assert_called_once_with(
nflog_handle, 0)
lib_log.libnflog.nflog_set_mode.assert_called_once_with(
g_handle, 0x2, 0xffff)
lib_log.libnflog.nflog_callback_register.assert_called_once_with(
g_handle, handle.cb, lib_log.ffi.NULL)