22
22
import subprocess
23
23
import tarfile
24
24
import tempfile
25
+ import time
25
26
from unittest import mock
26
27
27
28
from ironic_lib import utils as ironic_utils
@@ -877,6 +878,7 @@ def test_sync_clock_ntp_server_is_none(self, mock_time_method,
877
878
self .assertEqual (0 , mock_execute .call_count )
878
879
879
880
881
+ @mock .patch .object (utils , '_unmount_any_config_drives' , autospec = True )
880
882
@mock .patch .object (utils , '_booted_from_vmedia' , autospec = True )
881
883
@mock .patch .object (utils , '_check_vmedia_device' , autospec = True )
882
884
@mock .patch .object (utils , '_find_vmedia_device_by_labels' , autospec = True )
@@ -887,7 +889,8 @@ class TestCopyConfigFromVmedia(testtools.TestCase):
887
889
888
890
def test_vmedia_found_not_booted_from_vmedia (
889
891
self , mock_execute , mock_mount , mock_copy ,
890
- mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ):
892
+ mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ,
893
+ mock_unmount_config ):
891
894
mock_booted_from_vmedia .return_value = False
892
895
mock_find_device .return_value = '/dev/fake'
893
896
utils .copy_config_from_vmedia ()
@@ -896,10 +899,12 @@ def test_vmedia_found_not_booted_from_vmedia(
896
899
mock_copy .assert_not_called ()
897
900
mock_check_vmedia .assert_not_called ()
898
901
self .assertTrue (mock_booted_from_vmedia .called )
902
+ self .assertTrue (mock_unmount_config .called )
899
903
900
904
def test_no_vmedia (
901
905
self , mock_execute , mock_mount , mock_copy ,
902
- mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ):
906
+ mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ,
907
+ mock_unmount_config ):
903
908
mock_booted_from_vmedia .return_value = True
904
909
mock_find_device .return_value = None
905
910
utils .copy_config_from_vmedia ()
@@ -908,10 +913,12 @@ def test_no_vmedia(
908
913
mock_copy .assert_not_called ()
909
914
mock_check_vmedia .assert_not_called ()
910
915
self .assertFalse (mock_booted_from_vmedia .called )
916
+ self .assertTrue (mock_unmount_config .called )
911
917
912
918
def test_no_files (
913
919
self , mock_execute , mock_mount , mock_copy ,
914
- mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ):
920
+ mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ,
921
+ mock_unmount_config ):
915
922
mock_booted_from_vmedia .return_value = True
916
923
temp_path = tempfile .mkdtemp ()
917
924
self .addCleanup (lambda : shutil .rmtree (temp_path ))
@@ -925,10 +932,12 @@ def test_no_files(
925
932
'/dev/something' )
926
933
mock_copy .assert_not_called ()
927
934
self .assertTrue (mock_booted_from_vmedia .called )
935
+ self .assertTrue (mock_unmount_config .called )
928
936
929
937
def test_mounted_no_files (
930
938
self , mock_execute , mock_mount , mock_copy ,
931
- mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ):
939
+ mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ,
940
+ mock_unmount_config ):
932
941
933
942
mock_booted_from_vmedia .return_value = True
934
943
mock_execute .return_value = '/some/path' , ''
@@ -939,11 +948,13 @@ def test_mounted_no_files(
939
948
mock_copy .assert_not_called ()
940
949
mock_mount .assert_not_called ()
941
950
self .assertTrue (mock_booted_from_vmedia .called )
951
+ self .assertTrue (mock_unmount_config .called )
942
952
943
953
@mock .patch .object (os , 'makedirs' , autospec = True )
944
954
def test_copy (
945
955
self , mock_makedirs , mock_execute , mock_mount , mock_copy ,
946
- mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ):
956
+ mock_find_device , mock_check_vmedia , mock_booted_from_vmedia ,
957
+ mock_unmount_config ):
947
958
948
959
mock_booted_from_vmedia .return_value = True
949
960
mock_find_device .return_value = '/dev/something'
@@ -982,12 +993,14 @@ def _fake_mount(dev):
982
993
mock .call (mock .ANY , '/etc/ironic-python-agent.d/ironic.conf' ),
983
994
], any_order = True )
984
995
self .assertTrue (mock_booted_from_vmedia .called )
996
+ self .assertTrue (mock_unmount_config .called )
985
997
986
998
@mock .patch .object (os , 'makedirs' , autospec = True )
987
999
def test_copy_mounted (
988
1000
self , mock_makedirs , mock_execute , mock_mount ,
989
1001
mock_copy , mock_find_device , mock_check_vmedia ,
990
- mock_booted_from_vmedia ):
1002
+ mock_booted_from_vmedia ,
1003
+ mock_unmount_config ):
991
1004
mock_booted_from_vmedia .return_value = True
992
1005
mock_find_device .return_value = '/dev/something'
993
1006
path = tempfile .mkdtemp ()
@@ -1023,6 +1036,7 @@ def test_copy_mounted(
1023
1036
], any_order = True )
1024
1037
mock_mount .assert_not_called ()
1025
1038
self .assertTrue (mock_booted_from_vmedia .called )
1039
+ self .assertTrue (mock_unmount_config .called )
1026
1040
1027
1041
1028
1042
@mock .patch .object (requests , 'get' , autospec = True )
@@ -1143,3 +1157,20 @@ def test_early_logging_goes_to_logger(self, mock_log):
1143
1157
expected_calls = [mock .call ('Early logging: %s' , 'line 1.' ),
1144
1158
mock .call ('Early logging: %s' , 'line 2 message' )]
1145
1159
info .assert_has_calls (expected_calls )
1160
+
1161
+
1162
+ class TestUnmountOfConfig (ironic_agent_base .IronicAgentTest ):
1163
+
1164
+ @mock .patch .object (utils , '_early_log' , autospec = True )
1165
+ @mock .patch .object (os .path , 'ismount' , autospec = True )
1166
+ @mock .patch .object (utils , 'execute' , autospec = True )
1167
+ @mock .patch .object (time , 'sleep' , autospec = True )
1168
+ def test__unmount_any_config_drives (self , mock_sleep , mock_exec ,
1169
+ mock_ismount , mock_log ,):
1170
+ mock_ismount .side_effect = iter ([True , True , False ])
1171
+ utils ._unmount_any_config_drives ()
1172
+ self .assertEqual (2 , mock_sleep .call_count )
1173
+ self .assertEqual (2 , mock_log .call_count )
1174
+ mock_exec .assert_has_calls ([
1175
+ mock .call ('umount' , '/mnt/config' ),
1176
+ mock .call ('umount' , '/mnt/config' )])
0 commit comments