1
1
"""pytest tests testing subclasses of xcp.accessor.MountingAccessor using pyfakefs"""
2
+
3
+ import logging
2
4
import os
3
5
import sys
4
6
from io import BytesIO
5
7
from typing import TYPE_CHECKING , cast
6
8
9
+ import pytest
10
+ from pytest import LogCaptureFixture as LogCap
7
11
from mock import patch
8
12
from pyfakefs .fake_filesystem import FakeFileOpen , FakeFilesystem
9
13
18
22
if TYPE_CHECKING :
19
23
from typing_extensions import Literal
20
24
else :
21
- import pytest
22
-
23
25
pytest .skip (allow_module_level = True )
24
26
sys .exit (0 ) # Let pyright know that this is a dead end
25
27
@@ -30,8 +32,8 @@ def expect(fp, mount):
30
32
fp .register_subprocess (mount ) # type: ignore[arg-type]
31
33
32
34
33
- def test_device_accessor (fs , fp , mount_dir ):
34
- # type: (FakeFilesystem, FakeProcess, bytes) -> None
35
+ def test_device_accessor (fs , fp , mount_dir , caplog ):
36
+ # type: (FakeFilesystem, FakeProcess, bytes, LogCap ) -> None
35
37
assert isinstance (fp , FakeProcess )
36
38
37
39
# Test xcp.mount.bindMount()
@@ -43,11 +45,11 @@ def test_device_accessor(fs, fp, mount_dir):
43
45
accessor = xcp .accessor .createAccessor ("dev:///dev/device" , (True , ["" ]))
44
46
45
47
assert isinstance (accessor , xcp .accessor .MountingAccessorTypes )
46
- check_mounting_accessor (accessor , fs , fp , mount_dir )
48
+ check_mounting_accessor (accessor , fs , fp , mount_dir , caplog )
47
49
48
50
49
- def test_nfs_accessor (fs , fp , mount_dir ):
50
- # type: (FakeFilesystem, FakeProcess, bytes) -> None
51
+ def test_nfs_accessor (fs , fp , mount_dir , caplog ):
52
+ # type: (FakeFilesystem, FakeProcess, bytes, LogCap ) -> None
51
53
assert isinstance (fp , FakeProcess )
52
54
mount = [
53
55
b"/bin/mount" ,
@@ -61,11 +63,11 @@ def test_nfs_accessor(fs, fp, mount_dir):
61
63
expect (fp , mount )
62
64
accessor = xcp .accessor .createAccessor ("nfs://server/path" , False )
63
65
assert isinstance (accessor , xcp .accessor .NFSAccessor )
64
- check_mounting_accessor (accessor , fs , fp , mount_dir )
66
+ check_mounting_accessor (accessor , fs , fp , mount_dir , caplog )
65
67
66
68
67
- def check_mounting_accessor (accessor , fs , fp , mount_point ):
68
- # type: (xcp.accessor.Mount, FakeFilesystem, FakeProcess, bytes) -> None
69
+ def check_mounting_accessor (accessor , fs , fp , mount_point , caplog ):
70
+ # type: (xcp.accessor.Mount, FakeFilesystem, FakeProcess, bytes, LogCap ) -> None
69
71
"""Test subclasses of MountingAccessor (with xcp.cmd.runCmd in xcp.mount mocked)"""
70
72
71
73
assert isinstance (accessor , xcp .accessor .MountingAccessorTypes )
@@ -83,7 +85,7 @@ def check_mounting_accessor(accessor, fs, fp, mount_point):
83
85
fs .add_mount_point (location )
84
86
85
87
assert check_binary_read (accessor , location , fs )
86
- assert check_binary_write (accessor , location , fs )
88
+ assert check_binary_write (accessor , location , fs , caplog )
87
89
assert open_text (accessor , location , fs , UTF8TEXT_LITERAL ) == UTF8TEXT_LITERAL
88
90
89
91
if sys .version_info .major >= 3 :
@@ -119,15 +121,20 @@ def check_binary_read(accessor, location, fs):
119
121
return cast (bytes , binary_file .read ()) == binary_data
120
122
121
123
122
- def check_binary_write (accessor , location , fs ):
123
- # type: (Literal[False] | xcp.accessor.AnyAccessor, str, FakeFilesystem) -> bool
124
+ def check_binary_write (accessor , location , fs , caplog ):
125
+ # type: (xcp.accessor.AnyAccessor, str, FakeFilesystem, LogCap ) -> bool
124
126
"""Test the writeFile() method of different types of local Accessor classes"""
125
127
126
128
assert isinstance (accessor , xcp .accessor .LocalTypes )
127
129
name = "binary_file_written_by_accessor"
128
- accessor .writeFile (BytesIO (binary_data ), name )
129
-
130
- assert accessor .access (name )
130
+ with caplog .at_level (logging .FATAL ):
131
+ accessor .writeFile (BytesIO (binary_data ), name )
132
+ if caplog .record_tuples :
133
+ logger , level , message = caplog .record_tuples [0 ]
134
+ assert logger == "root"
135
+ assert level == logging .FATAL
136
+ assert message == "Copying to " + name
137
+ assert accessor .access (name )
131
138
132
139
with FakeFileOpen (fs , delete_on_close = True )(location + "/" + name , "rb" ) as written :
133
140
return cast (bytes , written .read ()) == binary_data
0 commit comments