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)
33 self
.assertEqual(len(trace
.user_attributes
), 0)
35 def test_create_invalid_name(self
):
36 with self
.assertRaises(TypeError):
39 def test_create_user_attributes(self
):
40 trace
= self
._tc
(user_attributes
={'salut': 23})
41 self
.assertEqual(trace
.user_attributes
, {'salut': 23})
43 def test_create_invalid_user_attributes(self
):
44 with self
.assertRaises(TypeError):
45 self
._tc
(user_attributes
=object())
47 def test_create_invalid_user_attributes_value_type(self
):
48 with self
.assertRaises(TypeError):
49 self
._tc
(user_attributes
=23)
51 def test_attr_trace_class(self
):
53 self
.assertEqual(trace
.cls
.addr
, self
._tc
.addr
)
55 def test_attr_name(self
):
56 trace
= self
._tc
(name
='mein trace')
57 self
.assertEqual(trace
.name
, 'mein trace')
59 def test_attr_uuid(self
):
60 trace
= self
._tc
(uuid
=uuid
.UUID('da7d6b6f-3108-4706-89bd-ab554732611b'))
61 self
.assertEqual(trace
.uuid
, uuid
.UUID('da7d6b6f-3108-4706-89bd-ab554732611b'))
63 def test_env_get(self
):
64 trace
= self
._tc
(env
={'hello': 'you', 'foo': -5})
65 self
.assertEqual(trace
.env
['hello'], 'you')
66 self
.assertEqual(trace
.env
['foo'], -5)
68 def test_env_get_non_existent(self
):
69 trace
= self
._tc
(env
={'hello': 'you', 'foo': -5})
71 with self
.assertRaises(KeyError):
76 sc
= self
._tc
.create_stream_class()
77 self
.assertEqual(len(trace
), 0)
79 trace
.create_stream(sc
)
80 self
.assertEqual(len(trace
), 1)
82 def _create_trace_with_some_streams(self
):
83 sc
= self
._tc
.create_stream_class(assigns_automatic_stream_id
=False)
85 trace
.create_stream(sc
, id=12)
86 trace
.create_stream(sc
, id=15)
87 trace
.create_stream(sc
, id=17)
92 trace
= self
._create
_trace
_with
_some
_streams
()
93 stream_ids
= set(trace
)
94 self
.assertEqual(stream_ids
, {12, 15, 17})
96 def test_getitem(self
):
97 trace
= self
._create
_trace
_with
_some
_streams
()
99 self
.assertEqual(trace
[12].id, 12)
101 def test_getitem_invalid_key(self
):
102 trace
= self
._create
_trace
_with
_some
_streams
()
103 with self
.assertRaises(KeyError):
106 def test_destruction_listener(self
):
107 def on_trace_class_destruction(trace_class
):
108 nonlocal trace_class_destroyed
109 trace_class_destroyed
= True
111 def on_trace_destruction(trace
):
112 nonlocal trace_destroyed
113 trace_destroyed
= True
115 trace_destroyed
= False
116 trace_class_destroyed
= False
118 trace_class
= get_default_trace_class()
119 stream_class
= trace_class
.create_stream_class()
120 trace
= trace_class()
121 stream
= trace
.create_stream(stream_class
)
123 trace_class
.add_destruction_listener(on_trace_class_destruction
)
124 trace
.add_destruction_listener(on_trace_destruction
)
126 self
.assertFalse(trace_class_destroyed
)
127 self
.assertFalse(trace_destroyed
)
131 self
.assertFalse(trace_class_destroyed
)
132 self
.assertFalse(trace_destroyed
)
136 self
.assertFalse(trace_class_destroyed
)
137 self
.assertTrue(trace_destroyed
)
141 self
.assertFalse(trace_class_destroyed
)
142 self
.assertTrue(trace_destroyed
)
146 self
.assertTrue(trace_class_destroyed
)
147 self
.assertTrue(trace_destroyed
)