1"""
2Unit tests for nyx.arguments.
3"""
4
5import unittest
6
7from nyx.arguments import DEFAULT_ARGS, parse, get_help, get_version
8
9
10class TestArgumentParsing(unittest.TestCase):
11  def test_that_we_get_default_values(self):
12    args = parse([])
13
14    for attr in DEFAULT_ARGS:
15      self.assertEqual(DEFAULT_ARGS[attr], getattr(args, attr))
16
17  def test_that_we_load_arguments(self):
18    args = parse(['--interface', '10.0.0.25:80'])
19    self.assertEqual(('10.0.0.25', 80), args.control_port)
20
21    args = parse(['--interface', '80'])
22    self.assertEqual((DEFAULT_ARGS['control_port'][0], 80), args.control_port)
23
24    args = parse(['--interface', ':80'])
25    self.assertEqual((DEFAULT_ARGS['control_port'][0], 80), args.control_port)
26
27    args = parse(['--socket', '/tmp/my_socket', '--config', '/tmp/my_config'])
28    self.assertEqual('/tmp/my_socket', args.control_socket)
29    self.assertEqual('/tmp/my_config', args.config)
30
31    args = parse(['--debug', '/tmp/dump'])
32    self.assertEqual('/tmp/dump', args.debug_path)
33
34    args = parse(['--log', 'DEBUG,NYX_DEBUG'])
35    self.assertEqual('DEBUG,NYX_DEBUG', args.logged_events)
36
37    args = parse(['--version'])
38    self.assertEqual(True, args.print_version)
39
40    args = parse(['--help'])
41    self.assertEqual(True, args.print_help)
42
43  def test_examples(self):
44    args = parse(['-i', '1643'])
45    self.assertEqual((DEFAULT_ARGS['control_port'][0], 1643), args.control_port)
46
47    args = parse(['-l', 'WARN,ERR', '-c', '/tmp/cfg'])
48    self.assertEqual('WARN,ERR', args.logged_events)
49    self.assertEqual('/tmp/cfg', args.config)
50
51  def test_that_we_reject_unrecognized_arguments(self):
52    self.assertRaises(ValueError, parse, ['--blarg', 'stuff'])
53
54  def test_port_and_socket_unset_other(self):
55    args = parse([])
56    self.assertEqual(DEFAULT_ARGS['control_port'], args.control_port)
57    self.assertEqual(DEFAULT_ARGS['control_socket'], args.control_socket)
58
59    args = parse(['--interface', '10.0.0.25:80'])
60    self.assertEqual(('10.0.0.25', 80), args.control_port)
61    self.assertEqual(None, args.control_socket)
62
63    args = parse(['--socket', '/tmp/my_socket'])
64    self.assertEqual(None, args.control_port)
65    self.assertEqual('/tmp/my_socket', args.control_socket)
66
67    args = parse(['--interface', '10.0.0.25:80', '--socket', '/tmp/my_socket'])
68    self.assertEqual(('10.0.0.25', 80), args.control_port)
69    self.assertEqual('/tmp/my_socket', args.control_socket)
70
71  def test_that_we_reject_invalid_interfaces(self):
72    invalid_inputs = (
73      '',
74      '    ',
75      'blarg',
76      '127.0.0.1',
77      '127.0.0.1:',
78      '400.0.0.1:80',
79      '127.0.0.1:-5',
80      '127.0.0.1:500000',
81    )
82
83    for invalid_input in invalid_inputs:
84      self.assertRaises(ValueError, parse, ['--interface', invalid_input])
85
86  def test_help(self):
87    self.assertTrue(get_help().startswith('Usage nyx [OPTION]'))
88    self.assertTrue('change control interface from 127.0.0.1:default' in get_help())
89
90  def test_version(self):
91    self.assertTrue(get_version().startswith('nyx version'))
92