Coverage for n2vc/tests/unit/test_utils.py: 100%

40 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-05-07 06:04 +0000

1# Copyright 2020 Canonical Ltd. 

2# 

3# Licensed under the Apache License, Version 2.0 (the "License"); 

4# you may not use this file except in compliance with the License. 

5# You may obtain a copy of the License at 

6# 

7# http://www.apache.org/licenses/LICENSE-2.0 

8# 

9# Unless required by applicable law or agreed to in writing, software 

10# distributed under the License is distributed on an "AS IS" BASIS, 

11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

12# See the License for the specific language governing permissions and 

13# limitations under the License. 

14 

15from unittest import TestCase 

16 

17from n2vc.utils import ( 

18 Dict, 

19 EntityType, 

20 JujuStatusToOSM, 

21 N2VCDeploymentStatus, 

22 get_ee_id_components, 

23) 

24from juju.machine import Machine 

25from juju.application import Application 

26from juju.action import Action 

27from juju.unit import Unit 

28 

29 

30class UtilsTest(TestCase): 

31 def test_dict(self): 

32 example = Dict({"key": "value"}) 

33 self.assertEqual(example["key"], example.key) 

34 

35 def test_entity_type(self): 

36 self.assertFalse(EntityType.has_value("machine2")) 

37 values = [Machine, Application, Action, Unit] 

38 for value in values: 

39 self.assertTrue(EntityType.has_value(value)) 

40 

41 self.assertEqual(EntityType.MACHINE, EntityType.get_entity(Machine)) 

42 self.assertEqual(EntityType.APPLICATION, EntityType.get_entity(Application)) 

43 self.assertEqual(EntityType.UNIT, EntityType.get_entity(Unit)) 

44 self.assertEqual(EntityType.ACTION, EntityType.get_entity(Action)) 

45 

46 def test_juju_status_to_osm(self): 

47 tests = [ 

48 { 

49 "entity_type": "machine", 

50 "status": [ 

51 {"juju": "pending", "osm": N2VCDeploymentStatus.PENDING}, 

52 {"juju": "started", "osm": N2VCDeploymentStatus.COMPLETED}, 

53 ], 

54 }, 

55 { 

56 "entity_type": "application", 

57 "status": [ 

58 {"juju": "waiting", "osm": N2VCDeploymentStatus.RUNNING}, 

59 {"juju": "maintenance", "osm": N2VCDeploymentStatus.RUNNING}, 

60 {"juju": "blocked", "osm": N2VCDeploymentStatus.RUNNING}, 

61 {"juju": "error", "osm": N2VCDeploymentStatus.FAILED}, 

62 {"juju": "active", "osm": N2VCDeploymentStatus.COMPLETED}, 

63 ], 

64 }, 

65 { 

66 "entity_type": "unit", 

67 "status": [ 

68 {"juju": "waiting", "osm": N2VCDeploymentStatus.RUNNING}, 

69 {"juju": "maintenance", "osm": N2VCDeploymentStatus.RUNNING}, 

70 {"juju": "blocked", "osm": N2VCDeploymentStatus.RUNNING}, 

71 {"juju": "error", "osm": N2VCDeploymentStatus.FAILED}, 

72 {"juju": "active", "osm": N2VCDeploymentStatus.COMPLETED}, 

73 ], 

74 }, 

75 { 

76 "entity_type": "action", 

77 "status": [ 

78 {"juju": "running", "osm": N2VCDeploymentStatus.RUNNING}, 

79 {"juju": "completed", "osm": N2VCDeploymentStatus.COMPLETED}, 

80 ], 

81 }, 

82 ] 

83 

84 for test in tests: 

85 entity_type = test["entity_type"] 

86 self.assertTrue(entity_type in JujuStatusToOSM) 

87 

88 for status in test["status"]: 

89 juju_status = status["juju"] 

90 osm_status = status["osm"] 

91 self.assertTrue(juju_status in JujuStatusToOSM[entity_type]) 

92 self.assertEqual(osm_status, JujuStatusToOSM[entity_type][juju_status]) 

93 

94 

95class GetEEComponentTest(TestCase): 

96 def test_valid(self): 

97 model, application, machine = get_ee_id_components("model.application.machine") 

98 self.assertEqual(model, "model") 

99 self.assertEqual(application, "application") 

100 self.assertEqual(machine, "machine") 

101 

102 def test_invalid(self): 

103 with self.assertRaises(Exception): 

104 get_ee_id_components("model.application.machine.1") 

105 with self.assertRaises(Exception): 

106 get_ee_id_components("model.application")