Skip to content

Commit

Permalink
Add test for maximum SMB valid pwrite range (#15011)
Browse files Browse the repository at this point in the history
We need to validate we can write above 16 TiB offset and that
we get properly stopped writing about 64 TiB offset.

(cherry picked from commit 2655712)

Co-authored-by: Andrew Walker <[email protected]>
  • Loading branch information
bugclerk and anodos325 authored Nov 21, 2024
1 parent fe1c118 commit e196a9c
Showing 1 changed file with 67 additions and 0 deletions.
67 changes: 67 additions & 0 deletions tests/api2/test_smb_write_offset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import os
import pytest
import random

from middlewared.test.integration.assets.account import user, group
from middlewared.test.integration.assets.pool import dataset
from middlewared.test.integration.assets.smb import smb_share
from middlewared.test.integration.utils import call

from protocols import smb_connection

from samba import ntstatus
from samba import NTSTATUSError

SHARE_NAME = 'offset_test'

LARGE_OFFSET = 0x0000140000000000
INVALID_OFFSET = 0x0000410000000000


@pytest.fixture(scope='module')
def setup_smb_tests():
with dataset('smbclient-testing', data={'share_type': 'SMB'}) as ds:
with user({
'username': 'smbuser',
'full_name': 'smbuser',
'group_create': True,
'password': 'Abcd1234'
}) as u:
with smb_share(os.path.join('/mnt', ds), SHARE_NAME) as s:
try:
call('service.start', 'cifs')
yield (ds, s, u)
finally:
call('service.stop', 'cifs')


def test_valid_offset(setup_smb_tests):
ds, share, smb_user = setup_smb_tests
with smb_connection(
share=SHARE_NAME,
username=smb_user['username'],
password='Abcd1234',
smb1=False
) as c:
fd = c.create_file('file_valid_offset', 'w')
buf = random.randbytes(1024)

c.write(fd, offset=LARGE_OFFSET, data=buf)
out = c.read(fd, offset=LARGE_OFFSET, cnt=1024)
assert buf == out


def test_invalid_offset(setup_smb_tests):
ds, share, smb_user = setup_smb_tests
with smb_connection(
share=SHARE_NAME,
username=smb_user['username'],
password='Abcd1234',
smb1=False
) as c:
fd = c.create_file('file_valid_offset', 'w')

with pytest.raises(NTSTATUSError) as nt_err:
c.write(fd, offset=INVALID_OFFSET, data=b'CANARY')

assert nt_err.value.args[0] == ntstatus.NT_STATUS_INVALID_PARAMETER

0 comments on commit e196a9c

Please sign in to comment.