Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/aleph/sdk/client/abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
Payment,
PostMessage,
)
from aleph_message.models.execution.environment import HypervisorType
from aleph_message.models.execution.program import Encoding
from aleph_message.status import MessageStatus

Expand Down Expand Up @@ -373,6 +374,7 @@ async def create_instance(
allow_amend: bool = False,
internet: bool = True,
aleph_api: bool = True,
hypervisor: Optional[HypervisorType] = None,
volumes: Optional[List[Mapping]] = None,
volume_persistence: str = "host",
ssh_keys: Optional[List[str]] = None,
Expand Down
4 changes: 4 additions & 0 deletions src/aleph/sdk/client/authenticated_http.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from aleph_message.models.execution.base import Encoding, Payment, PaymentType
from aleph_message.models.execution.environment import (
FunctionEnvironment,
HypervisorType,
MachineResources,
)
from aleph_message.models.execution.instance import RootfsVolume
Expand Down Expand Up @@ -520,6 +521,7 @@ async def create_instance(
allow_amend: bool = False,
internet: bool = True,
aleph_api: bool = True,
hypervisor: Optional[HypervisorType] = None,
volumes: Optional[List[Mapping]] = None,
volume_persistence: str = "host",
ssh_keys: Optional[List[str]] = None,
Expand All @@ -533,6 +535,7 @@ async def create_instance(
timeout_seconds = timeout_seconds or settings.DEFAULT_VM_TIMEOUT

payment = payment or Payment(chain=Chain.ETH, type=PaymentType.hold)
hypervisor = hypervisor or HypervisorType.firecracker

content = InstanceContent(
address=address,
Expand All @@ -541,6 +544,7 @@ async def create_instance(
reproducible=False,
internet=internet,
aleph_api=aleph_api,
hypervisor=hypervisor,
),
variables=environment_variables,
resources=MachineResources(
Expand Down
24 changes: 23 additions & 1 deletion tests/unit/test_asynchronous.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
ProgramMessage,
StoreMessage,
)
from aleph_message.models.execution.environment import MachineResources
from aleph_message.models.execution.environment import HypervisorType, MachineResources
from aleph_message.status import MessageStatus

from aleph.sdk.exceptions import InsufficientFundsError
Expand Down Expand Up @@ -116,6 +116,7 @@ async def test_create_instance(mock_session_with_post_success):
receiver="0x4145f182EF2F06b45E50468519C1B92C60FBd4A0",
type=PaymentType.superfluid,
),
hypervisor=HypervisorType.qemu,
)

assert mock_session_with_post_success.http_session.post.called_once
Expand Down Expand Up @@ -144,6 +145,27 @@ async def test_create_instance_no_payment(mock_session_with_post_success):
assert isinstance(instance_message, InstanceMessage)


@pytest.mark.asyncio
async def test_create_instance_no_hypervisor(mock_session_with_post_success):
"""Test that an instance can be created with no hypervisor specified.
It should in this case default to "firecracker".
"""
async with mock_session_with_post_success as session:
instance_message, message_status = await session.create_instance(
rootfs="cafecafecafecafecafecafecafecafecafecafecafecafecafecafecafecafe",
rootfs_size=1,
rootfs_name="rootfs",
channel="TEST",
metadata={"tags": ["test"]},
hypervisor=None,
)

assert instance_message.content.environment.hypervisor == HypervisorType.firecracker

assert mock_session_with_post_success.http_session.post.called_once
assert isinstance(instance_message, InstanceMessage)


@pytest.mark.asyncio
async def test_forget(mock_session_with_post_success):
async with mock_session_with_post_success as session:
Expand Down