Common: Rename OperatingSystems -> OperatingSystem

By convention, Enum names are singular.
This commit is contained in:
Mike Salvatore 2022-08-19 12:10:43 -04:00
parent 9fb0532646
commit 0e78129515
20 changed files with 65 additions and 65 deletions

View File

@ -2,4 +2,4 @@
Used for a common things between agent and island Used for a common things between agent and island
""" """
from .di_container import DIContainer, UnresolvableDependencyError from .di_container import DIContainer, UnresolvableDependencyError
from .operating_systems import OperatingSystems from .operating_system import OperatingSystem

View File

@ -1,7 +1,7 @@
from enum import Enum from enum import Enum
class OperatingSystems(Enum): class OperatingSystem(Enum):
""" """
An Enum representing all supported operating systems An Enum representing all supported operating systems

View File

@ -5,7 +5,7 @@ from typing import Mapping
import requests import requests
from common import OperatingSystems from common import OperatingSystem
from common.common_consts.timeouts import MEDIUM_REQUEST_TIMEOUT from common.common_consts.timeouts import MEDIUM_REQUEST_TIMEOUT
from . import IAgentRepository from . import IAgentRepository
@ -24,7 +24,7 @@ class CachingAgentRepository(IAgentRepository):
self._lock = threading.Lock() self._lock = threading.Lock()
def get_agent_binary( def get_agent_binary(
self, operating_system: OperatingSystems, architecture: str = None self, operating_system: OperatingSystem, architecture: str = None
) -> io.BytesIO: ) -> io.BytesIO:
# If multiple calls to get_agent_binary() are made simultaneously before the result of # If multiple calls to get_agent_binary() are made simultaneously before the result of
# _download_binary_from_island() is cached, then multiple requests will be sent to the # _download_binary_from_island() is cached, then multiple requests will be sent to the
@ -34,7 +34,7 @@ class CachingAgentRepository(IAgentRepository):
return io.BytesIO(self._download_binary_from_island(operating_system)) return io.BytesIO(self._download_binary_from_island(operating_system))
@lru_cache(maxsize=None) @lru_cache(maxsize=None)
def _download_binary_from_island(self, operating_system: OperatingSystems) -> bytes: def _download_binary_from_island(self, operating_system: OperatingSystem) -> bytes:
os_name = operating_system.value os_name = operating_system.value
response = requests.get( # noqa: DUO123 response = requests.get( # noqa: DUO123

View File

@ -1,7 +1,7 @@
import abc import abc
import io import io
from common import OperatingSystems from common import OperatingSystem
# TODO: The Island also has an IAgentRepository with a totally different interface. At the moment, # TODO: The Island also has an IAgentRepository with a totally different interface. At the moment,
# the Island and Agent have different needs, but at some point we should unify these. # the Island and Agent have different needs, but at some point we should unify these.
@ -16,7 +16,7 @@ class IAgentRepository(metaclass=abc.ABCMeta):
@abc.abstractmethod @abc.abstractmethod
def get_agent_binary( def get_agent_binary(
self, operating_system: OperatingSystems, architecture: str = None self, operating_system: OperatingSystem, architecture: str = None
) -> io.BytesIO: ) -> io.BytesIO:
""" """
Retrieve the appropriate agent binary from the repository. Retrieve the appropriate agent binary from the repository.

View File

@ -2,7 +2,7 @@ import logging
import time import time
from pathlib import PurePath from pathlib import PurePath
from common import OperatingSystems from common import OperatingSystem
from common.common_consts.timeouts import LONG_REQUEST_TIMEOUT, MEDIUM_REQUEST_TIMEOUT from common.common_consts.timeouts import LONG_REQUEST_TIMEOUT, MEDIUM_REQUEST_TIMEOUT
from common.utils import Timer from common.utils import Timer
from infection_monkey.exploit.log4shell_utils import ( from infection_monkey.exploit.log4shell_utils import (
@ -129,7 +129,7 @@ class Log4ShellExploiter(WebRCE):
} }
def _build_java_class(self, exploit_command: str) -> bytes: def _build_java_class(self, exploit_command: str) -> bytes:
if OperatingSystems.LINUX == self.host.os["type"]: if OperatingSystem.LINUX == self.host.os["type"]:
return build_exploit_bytecode(exploit_command, LINUX_EXPLOIT_TEMPLATE_PATH) return build_exploit_bytecode(exploit_command, LINUX_EXPLOIT_TEMPLATE_PATH)
else: else:
return build_exploit_bytecode(exploit_command, WINDOWS_EXPLOIT_TEMPLATE_PATH) return build_exploit_bytecode(exploit_command, WINDOWS_EXPLOIT_TEMPLATE_PATH)

View File

@ -2,7 +2,7 @@ import logging
from pathlib import Path, PurePath from pathlib import Path, PurePath
from typing import List, Optional from typing import List, Optional
from common import OperatingSystems from common import OperatingSystem
from infection_monkey.exploit.HostExploiter import HostExploiter from infection_monkey.exploit.HostExploiter import HostExploiter
from infection_monkey.exploit.powershell_utils.auth_options import AuthOptions, get_auth_options from infection_monkey.exploit.powershell_utils.auth_options import AuthOptions, get_auth_options
from infection_monkey.exploit.powershell_utils.credentials import ( from infection_monkey.exploit.powershell_utils.credentials import (
@ -163,7 +163,7 @@ class PowerShellExploiter(HostExploiter):
temp_monkey_binary_filepath.unlink() temp_monkey_binary_filepath.unlink()
def _create_local_agent_file(self, binary_path): def _create_local_agent_file(self, binary_path):
agent_binary_bytes = self.agent_repository.get_agent_binary(OperatingSystems.WINDOWS) agent_binary_bytes = self.agent_repository.get_agent_binary(OperatingSystem.WINDOWS)
with open(binary_path, "wb") as f: with open(binary_path, "wb") as f:
f.write(agent_binary_bytes.getvalue()) f.write(agent_binary_bytes.getvalue())

View File

@ -3,7 +3,7 @@ from abc import abstractmethod
from posixpath import join from posixpath import join
from typing import List, Tuple from typing import List, Tuple
from common import OperatingSystems from common import OperatingSystem
from common.utils.attack_utils import BITS_UPLOAD_STRING, ScanStatus from common.utils.attack_utils import BITS_UPLOAD_STRING, ScanStatus
from infection_monkey.exploit.HostExploiter import HostExploiter from infection_monkey.exploit.HostExploiter import HostExploiter
from infection_monkey.exploit.tools.http_tools import HTTPTools from infection_monkey.exploit.tools.http_tools import HTTPTools
@ -412,14 +412,14 @@ class WebRCE(HostExploiter):
:return: Default monkey's destination path for corresponding host or False if failed. :return: Default monkey's destination path for corresponding host or False if failed.
""" """
if not self.host.os.get("type") or ( if not self.host.os.get("type") or (
self.host.os["type"] != OperatingSystems.LINUX self.host.os["type"] != OperatingSystem.LINUX
and self.host.os["type"] != OperatingSystems.WINDOWS and self.host.os["type"] != OperatingSystem.WINDOWS
): ):
logger.error("Target's OS was either unidentified or not supported. Aborting") logger.error("Target's OS was either unidentified or not supported. Aborting")
return False return False
if self.host.os["type"] == OperatingSystems.LINUX: if self.host.os["type"] == OperatingSystem.LINUX:
return DROPPER_TARGET_PATH_LINUX return DROPPER_TARGET_PATH_LINUX
if self.host.os["type"] == OperatingSystems.WINDOWS: if self.host.os["type"] == OperatingSystem.WINDOWS:
return DROPPER_TARGET_PATH_WIN64 return DROPPER_TARGET_PATH_WIN64
def get_target_url(self): def get_target_url(self):

View File

@ -7,7 +7,7 @@ from queue import Queue
from threading import Event from threading import Event
from typing import Callable, Dict, Sequence from typing import Callable, Dict, Sequence
from common import OperatingSystems from common import OperatingSystem
from common.agent_configuration.agent_sub_configurations import ( from common.agent_configuration.agent_sub_configurations import (
ExploitationConfiguration, ExploitationConfiguration,
PluginConfiguration, PluginConfiguration,
@ -26,14 +26,14 @@ Callback = Callable[[ExploiterName, VictimHost, ExploiterResultData], None]
SUPPORTED_OS = { SUPPORTED_OS = {
"HadoopExploiter": [OperatingSystems.LINUX, OperatingSystems.WINDOWS], "HadoopExploiter": [OperatingSystem.LINUX, OperatingSystem.WINDOWS],
"Log4ShellExploiter": [OperatingSystems.LINUX, OperatingSystems.WINDOWS], "Log4ShellExploiter": [OperatingSystem.LINUX, OperatingSystem.WINDOWS],
"MSSQLExploiter": [OperatingSystems.WINDOWS], "MSSQLExploiter": [OperatingSystem.WINDOWS],
"PowerShellExploiter": [OperatingSystems.WINDOWS], "PowerShellExploiter": [OperatingSystem.WINDOWS],
"SSHExploiter": [OperatingSystems.LINUX], "SSHExploiter": [OperatingSystem.LINUX],
"SmbExploiter": [OperatingSystems.WINDOWS], "SmbExploiter": [OperatingSystem.WINDOWS],
"WmiExploiter": [OperatingSystems.WINDOWS], "WmiExploiter": [OperatingSystem.WINDOWS],
"ZerologonExploiter": [OperatingSystems.WINDOWS], "ZerologonExploiter": [OperatingSystem.WINDOWS],
} }

View File

@ -1,6 +1,6 @@
from typing import Optional from typing import Optional
from common import OperatingSystems from common import OperatingSystem
class VictimHost(object): class VictimHost(object):
@ -17,7 +17,7 @@ class VictimHost(object):
return self.__dict__ return self.__dict__
def is_windows(self) -> bool: def is_windows(self) -> bool:
return OperatingSystems.WINDOWS == self.os["type"] return OperatingSystem.WINDOWS == self.os["type"]
def __hash__(self): def __hash__(self):
return hash(self.ip_addr) return hash(self.ip_addr)

View File

@ -5,7 +5,7 @@ import re
import subprocess import subprocess
import sys import sys
from common import OperatingSystems from common import OperatingSystem
from infection_monkey.i_puppet import PingScanData from infection_monkey.i_puppet import PingScanData
from infection_monkey.utils.environment import is_windows_os from infection_monkey.utils.environment import is_windows_os
@ -80,9 +80,9 @@ def _process_ping_command_output(ping_command_output: str) -> PingScanData:
operating_system = None operating_system = None
if ttl <= LINUX_TTL: if ttl <= LINUX_TTL:
operating_system = OperatingSystems.LINUX operating_system = OperatingSystem.LINUX
else: # as far we we know, could also be OSX/BSD, but lets handle that when it comes up. else: # as far we we know, could also be OSX/BSD, but lets handle that when it comes up.
operating_system = OperatingSystems.WINDOWS operating_system = OperatingSystem.WINDOWS
return PingScanData(True, operating_system) return PingScanData(True, operating_system)

View File

@ -5,7 +5,7 @@ from typing import Dict
from odict import odict from odict import odict
from common import OperatingSystems from common import OperatingSystem
from infection_monkey.i_puppet import ( from infection_monkey.i_puppet import (
FingerprintData, FingerprintData,
IFingerprinter, IFingerprinter,
@ -194,9 +194,9 @@ class SMBFingerprinter(IFingerprinter):
logger.debug(f'os_version: "{os_version}", service_client: "{service_client}"') logger.debug(f'os_version: "{os_version}", service_client: "{service_client}"')
if os_version.lower() != "unix": if os_version.lower() != "unix":
os_type = OperatingSystems.WINDOWS os_type = OperatingSystem.WINDOWS
else: else:
os_type = OperatingSystems.LINUX os_type = OperatingSystem.LINUX
smb_service["name"] = service_client smb_service["name"] = service_client

View File

@ -1,7 +1,7 @@
import re import re
from typing import Dict, Optional, Tuple from typing import Dict, Optional, Tuple
from common import OperatingSystems from common import OperatingSystem
from infection_monkey.i_puppet import FingerprintData, IFingerprinter, PingScanData, PortScanData from infection_monkey.i_puppet import FingerprintData, IFingerprinter, PingScanData, PortScanData
SSH_REGEX = r"SSH-\d\.\d-OpenSSH" SSH_REGEX = r"SSH-\d\.\d-OpenSSH"
@ -41,6 +41,6 @@ class SSHFingerprinter(IFingerprinter):
for dist in LINUX_DIST_SSH: for dist in LINUX_DIST_SSH:
if banner.lower().find(dist) != -1: if banner.lower().find(dist) != -1:
os_version = banner.split(" ").pop().strip() os_version = banner.split(" ").pop().strip()
os = OperatingSystems.LINUX os = OperatingSystem.LINUX
return os, os_version return os, os_version

View File

@ -1,10 +1,10 @@
import json import json
from common import OperatingSystems from common import OperatingSystem
class TelemetryJSONEncoder(json.JSONEncoder): class TelemetryJSONEncoder(json.JSONEncoder):
def default(self, obj): def default(self, obj):
if isinstance(obj, OperatingSystems): if isinstance(obj, OperatingSystem):
return obj.name return obj.name
return json.JSONEncoder.default(self, obj) return json.JSONEncoder.default(self, obj)

View File

@ -3,7 +3,7 @@ from typing import Optional, Sequence
from pydantic import Field, PositiveInt, validator from pydantic import Field, PositiveInt, validator
from common import OperatingSystems from common import OperatingSystem
from .base_models import MutableBaseModel from .base_models import MutableBaseModel
from .transforms import make_immutable_sequence from .transforms import make_immutable_sequence
@ -15,7 +15,7 @@ class Machine(MutableBaseModel):
id: MachineID = Field(..., allow_mutation=False) id: MachineID = Field(..., allow_mutation=False)
hardware_id: Optional[PositiveInt] hardware_id: Optional[PositiveInt]
network_interfaces: Sequence[IPv4Interface] network_interfaces: Sequence[IPv4Interface]
operating_system: OperatingSystems operating_system: OperatingSystem
operating_system_version: str operating_system_version: str
hostname: str hostname: str

View File

@ -2,7 +2,7 @@ from unittest.mock import Mock
import pytest import pytest
from common import OperatingSystems from common import OperatingSystem
from infection_monkey.exploit.tools.helpers import ( from infection_monkey.exploit.tools.helpers import (
AGENT_BINARY_PATH_LINUX, AGENT_BINARY_PATH_LINUX,
AGENT_BINARY_PATH_WIN64, AGENT_BINARY_PATH_WIN64,
@ -14,15 +14,15 @@ from infection_monkey.exploit.tools.helpers import (
def _get_host(os): def _get_host(os):
host = Mock() host = Mock()
host.os = {"type": os} host.os = {"type": os}
host.is_windows = lambda: os == OperatingSystems.WINDOWS host.is_windows = lambda: os == OperatingSystem.WINDOWS
return host return host
@pytest.mark.parametrize( @pytest.mark.parametrize(
"os, path", "os, path",
[ [
(OperatingSystems.LINUX, AGENT_BINARY_PATH_LINUX), (OperatingSystem.LINUX, AGENT_BINARY_PATH_LINUX),
(OperatingSystems.WINDOWS, AGENT_BINARY_PATH_WIN64), (OperatingSystem.WINDOWS, AGENT_BINARY_PATH_WIN64),
], ],
) )
def test_get_agent_dst_path(os, path): def test_get_agent_dst_path(os, path):
@ -35,7 +35,7 @@ def test_get_agent_dst_path(os, path):
def test_get_agent_dst_path_randomness(): def test_get_agent_dst_path_randomness():
host = _get_host(OperatingSystems.WINDOWS) host = _get_host(OperatingSystem.WINDOWS)
path1 = get_agent_dst_path(host) path1 = get_agent_dst_path(host)
path2 = get_agent_dst_path(host) path2 = get_agent_dst_path(host)
@ -44,7 +44,7 @@ def test_get_agent_dst_path_randomness():
def test_get_agent_dst_path_str_place(): def test_get_agent_dst_path_str_place():
host = _get_host(OperatingSystems.WINDOWS) host = _get_host(OperatingSystem.WINDOWS)
rand_path = get_agent_dst_path(host) rand_path = get_agent_dst_path(host)

View File

@ -2,7 +2,7 @@ import logging
import threading import threading
from typing import Dict, Iterable, List, Sequence from typing import Dict, Iterable, List, Sequence
from common import OperatingSystems from common import OperatingSystem
from common.credentials import Credentials, LMHash, Password, SSHKeypair, Username from common.credentials import Credentials, LMHash, Password, SSHKeypair, Username
from infection_monkey.i_puppet import ( from infection_monkey.i_puppet import (
ExploiterResultData, ExploiterResultData,
@ -186,19 +186,19 @@ class MockPuppet(IPuppet):
successful_exploiters = { successful_exploiters = {
DOT_1: { DOT_1: {
"ZerologonExploiter": ExploiterResultData( "ZerologonExploiter": ExploiterResultData(
False, False, False, OperatingSystems.WINDOWS, {}, [], "Zerologon failed" False, False, False, OperatingSystem.WINDOWS, {}, [], "Zerologon failed"
), ),
"SSHExploiter": ExploiterResultData( "SSHExploiter": ExploiterResultData(
False, False,
False, False,
False, False,
OperatingSystems.LINUX, OperatingSystem.LINUX,
info_ssh, info_ssh,
attempts, attempts,
"Failed exploiting", "Failed exploiting",
), ),
"WmiExploiter": ExploiterResultData( "WmiExploiter": ExploiterResultData(
True, True, False, OperatingSystems.WINDOWS, info_wmi, attempts, None True, True, False, OperatingSystem.WINDOWS, info_wmi, attempts, None
), ),
}, },
DOT_3: { DOT_3: {
@ -206,7 +206,7 @@ class MockPuppet(IPuppet):
False, False,
False, False,
False, False,
OperatingSystems.WINDOWS, OperatingSystem.WINDOWS,
info_wmi, info_wmi,
attempts, attempts,
"PowerShell Exploiter Failed", "PowerShell Exploiter Failed",
@ -215,13 +215,13 @@ class MockPuppet(IPuppet):
False, False,
False, False,
False, False,
OperatingSystems.LINUX, OperatingSystem.LINUX,
info_ssh, info_ssh,
attempts, attempts,
"Failed exploiting", "Failed exploiting",
), ),
"ZerologonExploiter": ExploiterResultData( "ZerologonExploiter": ExploiterResultData(
True, False, False, OperatingSystems.WINDOWS, {}, [], None True, False, False, OperatingSystem.WINDOWS, {}, [], None
), ),
}, },
} }
@ -233,7 +233,7 @@ class MockPuppet(IPuppet):
False, False,
False, False,
False, False,
OperatingSystems.LINUX, OperatingSystem.LINUX,
{}, {},
[], [],
f"{name} failed for host {host}", f"{name} failed for host {host}",

View File

@ -7,7 +7,7 @@ from unittest.mock import MagicMock
import pytest import pytest
from tests.unit_tests.infection_monkey.master.mock_puppet import MockPuppet from tests.unit_tests.infection_monkey.master.mock_puppet import MockPuppet
from common import OperatingSystems from common import OperatingSystem
from common.agent_configuration.agent_sub_configurations import ( from common.agent_configuration.agent_sub_configurations import (
ExploitationConfiguration, ExploitationConfiguration,
PluginConfiguration, PluginConfiguration,
@ -165,7 +165,7 @@ def test_exploiter_raises_exception(callback, hosts, hosts_to_exploit, run_explo
def test_windows_exploiters_run_on_windows_host(callback, hosts, hosts_to_exploit, run_exploiters): def test_windows_exploiters_run_on_windows_host(callback, hosts, hosts_to_exploit, run_exploiters):
host = VictimHost("10.0.0.1") host = VictimHost("10.0.0.1")
host.os["type"] = OperatingSystems.WINDOWS host.os["type"] = OperatingSystem.WINDOWS
q = enqueue_hosts([host]) q = enqueue_hosts([host])
run_exploiters(MockPuppet(), 1, q) run_exploiters(MockPuppet(), 1, q)
@ -177,7 +177,7 @@ def test_windows_exploiters_run_on_windows_host(callback, hosts, hosts_to_exploi
def test_linux_exploiters_run_on_linux_host(callback, hosts, hosts_to_exploit, run_exploiters): def test_linux_exploiters_run_on_linux_host(callback, hosts, hosts_to_exploit, run_exploiters):
host = VictimHost("10.0.0.1") host = VictimHost("10.0.0.1")
host.os["type"] = OperatingSystems.LINUX host.os["type"] = OperatingSystem.LINUX
q = enqueue_hosts([host]) q = enqueue_hosts([host])
run_exploiters(MockPuppet(), 1, q) run_exploiters(MockPuppet(), 1, q)

View File

@ -4,7 +4,7 @@ from unittest.mock import MagicMock
import pytest import pytest
from common import OperatingSystems from common import OperatingSystem
from infection_monkey.network_scanning import ping from infection_monkey.network_scanning import ping
from infection_monkey.network_scanning.ping_scanner import EMPTY_PING_SCAN from infection_monkey.network_scanning.ping_scanner import EMPTY_PING_SCAN
@ -92,7 +92,7 @@ def test_linux_ping_success(patch_subprocess_running_ping_with_ping_output):
result = ping("192.168.1.1", 1.0) result = ping("192.168.1.1", 1.0)
assert result.response_received assert result.response_received
assert result.os == OperatingSystems.LINUX assert result.os == OperatingSystem.LINUX
@pytest.mark.usefixtures("set_os_linux") @pytest.mark.usefixtures("set_os_linux")
@ -110,7 +110,7 @@ def test_windows_ping_success(patch_subprocess_running_ping_with_ping_output):
result = ping("192.168.1.1", 1.0) result = ping("192.168.1.1", 1.0)
assert result.response_received assert result.response_received
assert result.os == OperatingSystems.WINDOWS assert result.os == OperatingSystem.WINDOWS
@pytest.mark.usefixtures("set_os_windows") @pytest.mark.usefixtures("set_os_windows")

View File

@ -1,6 +1,6 @@
import pytest import pytest
from common import OperatingSystems from common import OperatingSystem
from infection_monkey.i_puppet import FingerprintData, PortScanData, PortStatus from infection_monkey.i_puppet import FingerprintData, PortScanData, PortStatus
from infection_monkey.network_scanning.ssh_fingerprinter import SSHFingerprinter from infection_monkey.network_scanning.ssh_fingerprinter import SSHFingerprinter
@ -57,7 +57,7 @@ def test_ssh_os(ssh_fingerprinter):
results = ssh_fingerprinter.get_host_fingerprint("127.0.0.1", None, port_scan_data, None) results = ssh_fingerprinter.get_host_fingerprint("127.0.0.1", None, port_scan_data, None)
assert results == FingerprintData( assert results == FingerprintData(
OperatingSystems.LINUX, OperatingSystem.LINUX,
"Ubuntu-4ubuntu0.2", "Ubuntu-4ubuntu0.2",
{ {
"tcp-22": { "tcp-22": {
@ -79,7 +79,7 @@ def test_multiple_os(ssh_fingerprinter):
results = ssh_fingerprinter.get_host_fingerprint("127.0.0.1", None, port_scan_data, None) results = ssh_fingerprinter.get_host_fingerprint("127.0.0.1", None, port_scan_data, None)
assert results == FingerprintData( assert results == FingerprintData(
OperatingSystems.LINUX, OperatingSystem.LINUX,
"Debian", "Debian",
{ {
"tcp-22": { "tcp-22": {

View File

@ -5,7 +5,7 @@ from typing import MutableSequence
import pytest import pytest
from common import OperatingSystems from common import OperatingSystem
from monkey_island.cc.models import Machine from monkey_island.cc.models import Machine
MACHINE_OBJECT_DICT = MappingProxyType( MACHINE_OBJECT_DICT = MappingProxyType(
@ -13,7 +13,7 @@ MACHINE_OBJECT_DICT = MappingProxyType(
"id": 1, "id": 1,
"hardware_id": uuid.getnode(), "hardware_id": uuid.getnode(),
"network_interfaces": [IPv4Interface("10.0.0.1/24"), IPv4Interface("192.168.5.32/16")], "network_interfaces": [IPv4Interface("10.0.0.1/24"), IPv4Interface("192.168.5.32/16")],
"operating_system": OperatingSystems.WINDOWS, "operating_system": OperatingSystem.WINDOWS,
"operating_system_version": "eXtra Problems", "operating_system_version": "eXtra Problems",
"hostname": "my.host", "hostname": "my.host",
} }
@ -136,7 +136,7 @@ def test_operating_system_set_valid_value():
m = Machine(**MACHINE_OBJECT_DICT) m = Machine(**MACHINE_OBJECT_DICT)
# Raises exception_on_failure # Raises exception_on_failure
m.operating_system = OperatingSystems.LINUX m.operating_system = OperatingSystem.LINUX
def test_operating_system_set_invalid_value(): def test_operating_system_set_invalid_value():