Commit 953537e8 authored by Marc Vef's avatar Marc Vef
Browse files

Merge branch '107-add-i-o-tests' into 'master'

Resolve "Add I/O tests"

Closes #107

See merge request !47
parents be470cc7 c70a106d
Loading
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -46,6 +46,15 @@ gkfs_add_python_test(
    SOURCE shell/
)


gkfs_add_python_test(
    NAME test_data
    PYTHON_VERSION 3.6
    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests/integration
    SOURCE data/
)


if(GKFS_INSTALL_TESTS)
    install(DIRECTORY harness
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/gkfs/tests/integration
@@ -89,6 +98,14 @@ if(GKFS_INSTALL_TESTS)
    )


    install(DIRECTORY data
    DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/gkfs/tests/integration
    FILES_MATCHING
        REGEX ".*\\.py"
        PATTERN "__pycache__" EXCLUDE
        PATTERN ".pytest_cache" EXCLUDE
    )

    install(DIRECTORY shell
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/gkfs/tests/integration
        FILES_MATCHING
+4 −0
Original line number Diff line number Diff line
# README

This directory contains functional tests for any data-related
functionalities in GekkoFS.
+105 −0
Original line number Diff line number Diff line
################################################################################
#  Copyright 2018-2020, Barcelona Supercomputing Center (BSC), Spain           #
#  Copyright 2015-2020, Johannes Gutenberg Universitaet Mainz, Germany         #
#                                                                              #
#  This software was partially supported by the                                #
#  EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu).   #
#                                                                              #
#  This software was partially supported by the                                #
#  ADA-FS project under the SPPEXA project funded by the DFG.                  #
#                                                                              #
#  SPDX-License-Identifier: MIT                                                #
################################################################################

import harness
from pathlib import Path
import errno
import stat
import os
import ctypes
import sh
import sys
import pytest
import string
import random
from harness.logger import logger

nonexisting = "nonexisting"
chunksize_start = 128192
chunksize_end = 2097153
step = 4096*9

def generate_random_data(size):
    return ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(size)])




#@pytest.mark.xfail(reason="invalid errno returned on success")
def test_data_integrity(gkfs_daemon, gkfs_client):
    """Test several data write-read commands and check that the data is correct"""
    topdir = gkfs_daemon.mountdir / "top"
    file_a = topdir / "file_a"

    # create topdir
    ret = gkfs_client.mkdir(
            topdir,
            stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)

    assert ret.retval == 0
    assert ret.errno == 115 #FIXME: Should be 0!

    # test statx on existing dir
    ret = gkfs_client.statx(0, topdir, 0, 0)

    assert ret.retval == 0
    assert ret.errno == 115 #FIXME: Should be 0!
    assert stat.S_ISDIR(ret.statbuf.stx_mode)

    ret = gkfs_client.open(file_a,
                   os.O_CREAT,
                   stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)

    assert ret.retval != -1


    # test statx on existing file
    ret = gkfs_client.statx(0, file_a, 0, 0)

    assert ret.retval == 0
    assert (stat.S_ISDIR(ret.statbuf.stx_mode)==0)
    assert (ret.statbuf.stx_size == 0)


    # Step 1 - small sizes
    
    # Generate writes
    # Read data
    # Compare buffer

    
    for i in range (1, 512, 64):
        buf = bytes(generate_random_data(i), sys.stdout.encoding)
        
        ret = gkfs_client.write(file_a, buf, i)

        assert ret.retval == i
        ret = gkfs_client.statx(0, file_a, 0, 0)

        assert ret.retval == 0
        assert (ret.statbuf.stx_size == i)

        ret = gkfs_client.read(file_a, i)
        assert ret.retval== i
        assert ret.buf == buf


    # Step 2 - Compare bigger sizes exceeding typical chunksize
    for i in range (chunksize_start, chunksize_end, step):
        ret = gkfs_client.write_validate(file_a, i)
        assert ret.retval == 1


    return

+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ add_executable(gkfs.io
    gkfs.io/pwritev.cpp
    gkfs.io/statx.cpp
    gkfs.io/lseek.cpp
    gkfs.io/write_validate.cpp
)

include(FetchContent)
+3 −0
Original line number Diff line number Diff line
@@ -67,4 +67,7 @@ statx_init(CLI::App& app);
void
lseek_init(CLI::App& app);

void
write_validate_init(CLI::App& app);

#endif // IO_COMMANDS_HPP
Loading