2 # Copyright (C) 2019 EfficiOS Inc.
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; only version 2
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 from utils
import get_default_trace_class
24 class TraceTestCase(unittest
.TestCase
):
26 self
._tc
= get_default_trace_class()
28 def test_create_default(self
):
30 self
.assertIsNone(trace
.name
)
31 self
.assertIsNone(trace
.uuid
)
32 self
.assertEqual(len(trace
.env
), 0)
34 def test_create_invalid_name(self
):
35 with self
.assertRaises(TypeError):
38 def test_attr_trace_class(self
):
40 self
.assertEqual(trace
.cls
.addr
, self
._tc
.addr
)
42 def test_attr_name(self
):
43 trace
= self
._tc
(name
='mein trace')
44 self
.assertEqual(trace
.name
, 'mein trace')
46 def test_attr_uuid(self
):
47 trace
= self
._tc
(uuid
=uuid
.UUID('da7d6b6f-3108-4706-89bd-ab554732611b'))
48 self
.assertEqual(trace
.uuid
, uuid
.UUID('da7d6b6f-3108-4706-89bd-ab554732611b'))
50 def test_env_get(self
):
51 trace
= self
._tc
(env
={'hello': 'you', 'foo': -5})
52 self
.assertEqual(trace
.env
['hello'], 'you')
53 self
.assertEqual(trace
.env
['foo'], -5)
55 def test_env_get_non_existent(self
):
56 trace
= self
._tc
(env
={'hello': 'you', 'foo': -5})
58 with self
.assertRaises(KeyError):
63 sc
= self
._tc
.create_stream_class()
64 self
.assertEqual(len(trace
), 0)
66 trace
.create_stream(sc
)
67 self
.assertEqual(len(trace
), 1)
69 def _create_trace_with_some_streams(self
):
70 sc
= self
._tc
.create_stream_class(assigns_automatic_stream_id
=False)
72 trace
.create_stream(sc
, id=12)
73 trace
.create_stream(sc
, id=15)
74 trace
.create_stream(sc
, id=17)
79 trace
= self
._create
_trace
_with
_some
_streams
()
80 stream_ids
= set(trace
)
81 self
.assertEqual(stream_ids
, {12, 15, 17})
83 def test_getitem(self
):
84 trace
= self
._create
_trace
_with
_some
_streams
()
86 self
.assertEqual(trace
[12].id, 12)
88 def test_getitem_invalid_key(self
):
89 trace
= self
._create
_trace
_with
_some
_streams
()
90 with self
.assertRaises(KeyError):
93 def test_destruction_listener(self
):
94 def on_trace_class_destruction(trace_class
):
95 nonlocal trace_class_destroyed
96 trace_class_destroyed
= True
98 def on_trace_destruction(trace
):
99 nonlocal trace_destroyed
100 trace_destroyed
= True
102 trace_destroyed
= False
103 trace_class_destroyed
= False
105 trace_class
= get_default_trace_class()
106 stream_class
= trace_class
.create_stream_class()
107 trace
= trace_class()
108 stream
= trace
.create_stream(stream_class
)
110 trace_class
.add_destruction_listener(on_trace_class_destruction
)
111 trace
.add_destruction_listener(on_trace_destruction
)
113 self
.assertFalse(trace_class_destroyed
)
114 self
.assertFalse(trace_destroyed
)
118 self
.assertFalse(trace_class_destroyed
)
119 self
.assertFalse(trace_destroyed
)
123 self
.assertFalse(trace_class_destroyed
)
124 self
.assertTrue(trace_destroyed
)
128 self
.assertFalse(trace_class_destroyed
)
129 self
.assertTrue(trace_destroyed
)
133 self
.assertTrue(trace_class_destroyed
)
134 self
.assertTrue(trace_destroyed
)