|
|
|
@ -4,12 +4,16 @@ from app.machinecontrol import Machine
|
|
|
|
|
from app.exceptions import ConfigurationError
|
|
|
|
|
from app.config import MachineConfig
|
|
|
|
|
from unittest.mock import patch
|
|
|
|
|
from app.attack_log import AttackLog
|
|
|
|
|
|
|
|
|
|
# https://docs.python.org/3/library/unittest.html
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestMachineControl(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
def setUp(self) -> None:
|
|
|
|
|
self.attack_logger = AttackLog(0)
|
|
|
|
|
|
|
|
|
|
def test_get_os_linux_machine(self):
|
|
|
|
|
m = Machine({"root": "systems/attacker1",
|
|
|
|
|
"os": "linux",
|
|
|
|
@ -17,7 +21,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"type": "vagrant",
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"})
|
|
|
|
|
"vm_name": "target3"}, self.attack_logger)
|
|
|
|
|
self.assertEqual(m.get_os(), "linux")
|
|
|
|
|
|
|
|
|
|
def test_get_os_linux_machine_with_config_class(self):
|
|
|
|
@ -28,7 +32,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"})
|
|
|
|
|
m = Machine(mc)
|
|
|
|
|
m = Machine(mc, self.attack_logger)
|
|
|
|
|
self.assertEqual(m.get_os(), "linux")
|
|
|
|
|
|
|
|
|
|
def test_get_os_missing(self):
|
|
|
|
@ -39,7 +43,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
def test_get_os_not_supported(self):
|
|
|
|
|
with self.assertRaises(ConfigurationError):
|
|
|
|
@ -49,7 +53,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"type": "vagrant",
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"})
|
|
|
|
|
"vm_name": "target3"}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
def test_get_paw_good(self):
|
|
|
|
|
m = Machine({"root": "systems/attacker1",
|
|
|
|
@ -59,7 +63,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"type": "vagrant",
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"})
|
|
|
|
|
"vm_name": "target3"}, self.attack_logger)
|
|
|
|
|
self.assertEqual(m.get_paw(), "testme")
|
|
|
|
|
|
|
|
|
|
def test_get_paw_missing(self):
|
|
|
|
@ -70,7 +74,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
self.assertEqual(m.get_paw(), None)
|
|
|
|
|
|
|
|
|
|
def test_get_group_good(self):
|
|
|
|
@ -81,7 +85,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"type": "vagrant",
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"})
|
|
|
|
|
"vm_name": "target3"}, self.attack_logger)
|
|
|
|
|
self.assertEqual(m.get_group(), "testme")
|
|
|
|
|
|
|
|
|
|
def test_get_group_missing(self):
|
|
|
|
@ -92,7 +96,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
self.assertEqual(m.get_group(), None)
|
|
|
|
|
|
|
|
|
|
def test_vagrantfilepath_missing(self):
|
|
|
|
@ -103,7 +107,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"type": "vagrant",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
def test_vagrantfile_missing(self):
|
|
|
|
|
with self.assertRaises(ConfigurationError):
|
|
|
|
@ -114,7 +118,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vagrantfilepath": "non_existing",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
def test_vagrantfile_existing(self):
|
|
|
|
|
m = Machine({"root": "systems/attacker1",
|
|
|
|
@ -124,7 +128,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
self.assertIsNotNone(m)
|
|
|
|
|
|
|
|
|
|
def test_name_missing(self):
|
|
|
|
@ -135,7 +139,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"type": "vagrant",
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
# test: auto generated, dir missing
|
|
|
|
|
def test_auto_generated_machinepath_with_path_missing(self):
|
|
|
|
@ -147,7 +151,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "missing"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
# test manual config, dir missing
|
|
|
|
|
def test_configured_machinepath_with_path_missing(self):
|
|
|
|
@ -160,7 +164,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3",
|
|
|
|
|
"machinepath": "missing"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
# test auto generated, dir there (external/internal dirs must work !)
|
|
|
|
|
def test_auto_generated_machinepath_with_good_config(self):
|
|
|
|
@ -171,7 +175,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vagrantfilepath": "systems",
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
vagrantfilepath = os.path.abspath("systems")
|
|
|
|
|
ext = os.path.join(vagrantfilepath, "target3")
|
|
|
|
|
internal = os.path.join("/vagrant/", "target3")
|
|
|
|
@ -189,7 +193,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "missing",
|
|
|
|
|
"machinepath": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
vagrantfilepath = os.path.abspath("systems")
|
|
|
|
|
ext = os.path.join(vagrantfilepath, "target3")
|
|
|
|
|
internal = os.path.join("/vagrant/", "target3")
|
|
|
|
@ -204,7 +208,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"os": "linux",
|
|
|
|
|
"vm_name": "missing",
|
|
|
|
|
"machinepath": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
# vm_controller wrong
|
|
|
|
|
def test_configured_vm_controller_wrong_type(self):
|
|
|
|
@ -217,7 +221,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "missing",
|
|
|
|
|
"machinepath": "target3"
|
|
|
|
|
})
|
|
|
|
|
}, self.attack_logger)
|
|
|
|
|
|
|
|
|
|
# Create caldera start command and verify it
|
|
|
|
|
def test_get_linux_caldera_start_cmd(self):
|
|
|
|
@ -229,7 +233,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
},
|
|
|
|
|
"vm_name": "target3",
|
|
|
|
|
"group": "testgroup",
|
|
|
|
|
"paw": "testpaw"})
|
|
|
|
|
"paw": "testpaw"}, self.attack_logger)
|
|
|
|
|
m.set_caldera_server("http://www.test.test")
|
|
|
|
|
with patch.object(m.vm_manager, "get_playground", return_value="/vagrant/target3"):
|
|
|
|
|
cmd = m.create_start_caldera_client_cmd()
|
|
|
|
@ -246,7 +250,7 @@ class TestMachineControl(unittest.TestCase):
|
|
|
|
|
"vm_name": "target3",
|
|
|
|
|
"group": "testgroup",
|
|
|
|
|
"paw": "testpaw",
|
|
|
|
|
"machinepath": "target2w"})
|
|
|
|
|
"machinepath": "target2w"}, self.attack_logger)
|
|
|
|
|
m.set_caldera_server("www.test.test")
|
|
|
|
|
cmd = m.create_start_caldera_client_cmd()
|
|
|
|
|
self.maxDiff = None
|
|
|
|
|