Iris Vessey

73 papers A 2C 12Journal 48Unranked 11
YearRankTypeTitle / Venue / Authors
2016 J jnl
J. Assoc. Inf. Syst.
Vijay Khatri, Iris Vessey
2015 conf
HCI (23)
Yunfei Shi, Dongming Xu, Iris Vessey
2013 J jnl
J. Assoc. Inf. Syst.
Iris Vessey, Kerry Ward
2013 C conf
ICIS
Andrew Burton-Jones, Peter F. Green, Iris Vessey
2011 J jnl
IEEE Softw.
Robert L. Glass, Iris Vessey
2010 J jnl
Commun. Assoc. Inf. Syst.
Michael Rosemann, Jan Recker, Iris Vessey
2010 A conf
ER
Vijay Khatri, Iris Vessey
2009 conf
AMCIS
Corina Raduescu, Iris Vessey
2009 J jnl
Inf. Softw. Technol.
Robert L. Glass, Iris Vessey, Venkataraman Ramesh
2008 C conf
ICIS
Vijay Khatri, Iris Vessey
2007 conf
AMCIS
Michael Rosemann, Iris Vessey, Ron Weber, Corina Raduescu
2006 A conf
ER
Vijay Khatri, Iris Vessey
2006 J jnl
MIS Q.
Teresa M. Shaft, Iris Vessey
2006 J jnl
MIS Q.
Michael Rosemann, Iris Vessey
2006 J jnl
Inf. Syst. Res.
Vijay Khatri, Iris Vessey, Venkataraman Ramesh, Paul Clay, Sungjin Park
2005 J jnl
Inf. Softw. Technol.
Iris Vessey, Venkataraman Ramesh, Robert L. Glass
2005 conf
ECIS
Michael Rosemann, Iris Vessey
2005 conf
ACIS
Michael Rosemann, Iris Vessey, Ron Weber, Boris Wyssusek
2005 J jnl
MIS Q. Executive
Alan R. Dennis, Iris Vessey
2004 C conf
ICIS
Michael Rosemann, Iris Vessey, Ron Weber
2004 J jnl
Commun. ACM
Robert L. Glass, Venkataraman Ramesh, Iris Vessey
2004 conf
ACIS
Iris Vessey, Ron Weber, Boris Wyssusek
2004 J jnl
J. Syst. Softw.
Venkataraman Ramesh, Robert L. Glass, Iris Vessey
2003 J jnl
MIS Q. Executive
Carol V. Brown, Iris Vessey
2003 J jnl
Decis. Sci.
Cheri Speier, Iris Vessey, Joseph S. Valacich
2002 J jnl
Commun. ACM
Judy E. Scott, Iris Vessey
2002 J jnl
J. Manag. Inf. Syst.
Iris Vessey, Venkataraman Ramesh, Robert L. Glass
2002 J jnl
Inf. Softw. Technol.
Robert L. Glass, Iris Vessey, Venkataraman Ramesh
2001 J jnl
Inf. Technol. Manag.
Prabuddha De, Atish P. Sinha, Iris Vessey
2001 J jnl
Commun. Assoc. Inf. Syst.
Steven Alter, M. Lynne Markus, Judy E. Scott, Iris Vessey
2001 J jnl
Commun. Assoc. Inf. Syst.
Carol V. Brown, Iris Vessey
2001 conf
ECIS
Guy G. Gable, M. Lynne Markus, Kenny K. F. Lee, Graeme G. Shanks, Iris Vessey
2000 C conf
ICIS
Steven Alter, M. Lynne Markus, Judy E. Scott, Phillip Ein-Dor, Iris Vessey
2000 J jnl
Inf. Syst. Frontiers
Judy E. Scott, Iris Vessey
2000 C conf
ICIS
Carol V. Brown, Iris Vessey
2000 conf
ECIS
M. Lynne Markus, Guy G. Gable, Judy E. Scott, Iris Vessey, Klaus-Dieter Gronwald
1999 C conf
ICIS
Atish P. Sinha, Iris Vessey
1999 C conf
ICIS
Carol V. Brown, Iris Vessey
1998 conf
HICSS (3)
Robert L. Glass, Iris Vessey
1998 J jnl
Commun. ACM
Iris Vessey, Robert L. Glass
1998 J jnl
J. Manag. Inf. Syst.
Teresa M. Shaft, Iris Vessey
1997 conf
ESP
Iris Vessey
1997 C conf
ICIS
Cheri Speier, Joseph S. Valacich, Iris Vessey
1995 J jnl
Commun. ACM
Iris Vessey, Ajay Paul Sravanapudi
1995 J jnl
IEEE Softw.
Robert L. Glass, Iris Vessey
1995 J jnl
Inf. Syst. Res.
Teresa M. Shaft, Iris Vessey
1994 C conf
ICIS
Jeffrey Parsons, Ritu Agarwal, Dinesh Batra, Iris Vessey, Yair Wand
1994 J jnl
Commun. ACM
Iris Vessey, Sue A. Conger
1994 conf
HICSS (4)
Robert L. Glass, Iris Vessey
1994 J jnl
Inf. Manag.
Iris Vessey
1993 J jnl
J. Manag. Inf. Syst.
Iris Vessey, Sue A. Conger
1993 J jnl
J. Syst. Softw.
Jean Scholtz, Shyam R. Chidamber, Robert L. Glass, Al Goerner, Mary Beth Rosson, Michael Stark, Iris Vessey
1992 J jnl
IEEE Trans. Software Eng.
Atish P. Sinha, Iris Vessey
1992 J jnl
Commun. ACM
Iris Vessey, Sirkka L. Jarvenpaa, Noam Tractinsky
1992 J jnl
Inf. Manag.
Robert L. Glass, Iris Vessey, Sue A. Conger
1992 J jnl
J. Syst. Softw.
Robert L. Glass, Iris Vessey
1991 J jnl
Inf. Syst. Res.
Iris Vessey, Dennis F. Galletta
1991 C conf
ICIS
Narayan S. Umananth, Iris Vessey
1989 J jnl
Int. J. Man Mach. Stud.
Iris Vessey
1988 J jnl
MIS Q.
Peter Tait, Iris Vessey
1987 J jnl
Int. J. Man Mach. Stud.
Iris Vessey
1986 J jnl
IEEE Trans. Syst. Man Cybern.
Iris Vessey
1986 J jnl
Inf. Manag.
Iris Vessey
1986 J jnl
Commun. ACM
Iris Vessey, Ron Weber
1985 J jnl
Int. J. Man Mach. Stud.
Iris Vessey
1985 C conf
ICIS
Iris Vessey
1985 C conf
ICIS
Iris Vessey, Ron Weber
1984 J jnl
Int. J. Man Mach. Stud.
Iris Vessey, Ron Weber
1984 J jnl
IEEE Trans. Software Eng.
Iris Vessey, Ron Weber
1983 J jnl
Commun. ACM
Iris Vessey, Ron Weber
1981 J jnl
MIS Q.
Jack Ewers, Iris Vessey
1980 J jnl
Inf. Manag.
D. R. Jeffrey, Iris Vessey
1980 J jnl
MIS Q.
Izak Benbasat, Iris Vessey
tests/integration/test_pe_extractor.py
← Index tests/integration/test_pe_extractor.py python
"""
Integration tests for the PEExtractor base class.
"""
import pytest
from unittest.mock import Mock, patch, MagicMock

pytestmark = [pytest.mark.integration, pytest.mark.pe]


class TestPEExtractorInitialization:
    """Tests for PEExtractor initialization."""

    def test_pe_extractor_with_valid_pe(self, pe_binary_path, mock_logger):
        """Test PEExtractor initialization with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            assert extractor.pe is not None
            assert extractor.filepath == pe_binary_path

    def test_pe_extractor_with_provided_pe_object(self, pe_binary_path, mock_logger, pe_object):
        """Test PEExtractor initialization with pre-existing PE object."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger, pe=pe_object)

            # Should use the provided PE object, not create a new one
            assert extractor.pe is pe_object

    def test_pe_extractor_with_invalid_file(self, elf_binary_path, mock_logger):
        """Test PEExtractor initialization with non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(elf_binary_path, mock_logger)

            # Should return None for pe when file is not a valid PE
            assert extractor.pe is None
            # Logger should have recorded an error
            assert mock_logger.error.called


class TestPEExtractorMethods:
    """Tests for PEExtractor helper methods."""

    def test_check_dotnet_true(self, pe_binary_path, mock_logger):
        """Test _check_dotnet returns True for .NET PE."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            # The test PE file is a .NET binary
            if extractor.pe is not None:
                result = extractor._check_dotnet()
                # d8637bdbcfc9112fcb1f0167b398e771 is a .NET binary
                assert result is True

    def test_check_dotnet_false(self, elf_binary_path, mock_logger):
        """Test _check_dotnet returns False for non-PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(elf_binary_path, mock_logger)

            # Should return False when PE is None
            result = extractor._check_dotnet()
            assert result is False

    def test_is_signed_false(self, pe_binary_path, mock_logger):
        """Test _is_signed method."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                result = extractor._is_signed()
                # Result depends on the actual binary
                assert isinstance(result, bool)

    def test_has_overlay(self, pe_binary_path, mock_logger):
        """Test _has_overlay method."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                result = extractor._has_overlay()
                assert isinstance(result, bool)


class TestGeneratePEFileObject:
    """Tests for _generate_pefile_object method."""

    def test_generate_pefile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_pefile_object with valid PE file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            # The PE object should be created successfully
            assert extractor.pe is not None

    def test_generate_pefile_object_invalid(self, temp_text_file, mock_logger):
        """Test _generate_pefile_object with invalid file."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(temp_text_file, mock_logger)

            # Should return None for invalid PE
            assert extractor.pe is None


class TestGenerateDotNetFileObject:
    """Tests for _generate_dotnetfile_object method."""

    def test_generate_dotnetfile_object_valid(self, pe_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with .NET PE file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEDotNetExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None and extractor._check_dotnet():
                dotnet, error = extractor._generate_dotnetfile_object()
                # Should create dotnet object for .NET PE
                assert dotnet is not None
                assert error is None

    def test_generate_dotnetfile_object_invalid(self, elf_binary_path, mock_logger):
        """Test _generate_dotnetfile_object with non-.NET file."""
        from redb.extractors.pe_extractors.pe_dotnet import PEDotNetExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEDotNetExtractor(elf_binary_path, mock_logger)

            dotnet, error = extractor._generate_dotnetfile_object()
            # Should return error for non-.NET file
            assert dotnet is None
            assert error is not None


class TestPEExtractorTag:
    """Tests for tag method in PE extractors."""

    def test_pe_features_tag(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_FEATURES.value

    def test_pe_import_tag(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_IMPORT.value

    def test_pe_section_tag(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct tag."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor
        from redb.extractors.enum import Tag

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.tag() == Tag.PE_SECTION.value


class TestPEExtractorClickHouseTable:
    """Tests for get_clickhouse_table method in PE extractors."""

    def test_pe_features_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEFeaturesExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_features"

    def test_pe_import_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PEImportExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_imports import PEImportExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEImportExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_imports"

    def test_pe_section_clickhouse_table(self, pe_binary_path, mock_logger):
        """Test that PESectionExtractor returns correct ClickHouse table name."""
        from redb.extractors.pe_extractors.pe_sections import PESectionExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PESectionExtractor(pe_binary_path, mock_logger)
            assert extractor.get_clickhouse_table() == "redb_pe_sections"


class TestPEExtractorPrepareExportData:
    """Tests for prepare_export_data method in PE extractors."""

    def test_pe_features_prepare_export_elasticsearch(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for Elasticsearch."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ElasticsearchExporter")
                # Should return the pe_features dataclass
                assert result is extractor.pe_features

    def test_pe_features_prepare_export_clickhouse(self, pe_binary_path, mock_logger):
        """Test prepare_export_data for ClickHouse."""
        from redb.extractors.pe_extractors.pe_features import PEFeaturesExtractor

        with patch('redb.settings.ELASTIC_BINARIES_COLLECTION', 'test'):
            extractor = PEFeaturesExtractor(pe_binary_path, mock_logger)

            if extractor.pe is not None:
                # First extract
                extractor.extract()
                result = extractor.prepare_export_data("ClickHouseExporter")

                # Should return tuple of (data, column_names, column_type_names)
                assert isinstance(result, tuple)
                assert len(result) == 3
                data, column_names, column_type_names = result
                assert isinstance(data, list)
                assert isinstance(column_names, list)
                assert isinstance(column_type_names, list)
                # Column names and types should match in length
                assert len(column_names) == len(column_type_names)