1import unittest
2
3from stem.interpreter.arguments import DEFAULT_ARGS, parse, get_help
4
5
6class TestArgumentParsing(unittest.TestCase):
7  def test_that_we_get_default_values(self):
8    args = parse([])
9
10    for attr in DEFAULT_ARGS:
11      self.assertEqual(DEFAULT_ARGS[attr], getattr(args, attr))
12
13  def test_that_we_load_arguments(self):
14    args = parse(['--interface', '10.0.0.25:80'])
15    self.assertEqual('10.0.0.25', args.control_address)
16    self.assertEqual(80, args.control_port)
17
18    args = parse(['--interface', '80'])
19    self.assertEqual(DEFAULT_ARGS['control_address'], args.control_address)
20    self.assertEqual(80, args.control_port)
21
22    args = parse(['--socket', '/tmp/my_socket'])
23    self.assertEqual('/tmp/my_socket', args.control_socket)
24
25    args = parse(['--help'])
26    self.assertEqual(True, args.print_help)
27
28  def test_examples(self):
29    args = parse(['-i', '1643'])
30    self.assertEqual(1643, args.control_port)
31
32    args = parse(['-s', '~/.tor/socket'])
33    self.assertEqual('~/.tor/socket', args.control_socket)
34
35  def test_that_we_reject_unrecognized_arguments(self):
36    self.assertRaises(ValueError, parse, ['--blarg', 'stuff'])
37
38  def test_that_we_reject_invalid_interfaces(self):
39    invalid_inputs = (
40      '',
41      '    ',
42      'blarg',
43      '127.0.0.1',
44      '127.0.0.1:',
45      ':80',
46      '400.0.0.1:80',
47      '127.0.0.1:-5',
48      '127.0.0.1:500000',
49    )
50
51    for invalid_input in invalid_inputs:
52      self.assertRaises(ValueError, parse, ['--interface', invalid_input])
53
54  def test_run_with_command(self):
55    self.assertEqual('GETINFO version', parse(['--run', 'GETINFO version']).run_cmd)
56
57  def test_run_with_path(self):
58    self.assertEqual(__file__, parse(['--run', __file__]).run_path)
59
60  def test_get_help(self):
61    help_text = get_help()
62    self.assertTrue('Interactive interpreter for Tor.' in help_text)
63    self.assertTrue('change control interface from 127.0.0.1:default' in help_text)
64