Skip to content

Commit

Permalink
add negative tests for mem_size in machine config
Browse files Browse the repository at this point in the history
Signed-off-by: Luminita Voicu <lumivo@amazon.com>
  • Loading branch information
luminitavoicu authored and georgepisaltu committed Jun 28, 2021
1 parent 72351c2 commit 5898fe1
Showing 1 changed file with 66 additions and 6 deletions.
72 changes: 66 additions & 6 deletions tests/integration_tests/functional/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,19 @@

import os
import platform
import resource
import time

import pytest

from framework.builder import MicrovmBuilder
import framework.utils_cpuid as utils
import host_tools.drive as drive_tools
import host_tools.logging as log_tools
import host_tools.network as net_tools

MEM_LIMIT = 1000000000


def test_api_happy_start(test_microvm_with_api):
"""Test a regular microvm API start sequence."""
Expand Down Expand Up @@ -223,12 +227,6 @@ def test_api_put_machine_config(test_microvm_with_api):
)
assert test_microvm.api_session.is_status_bad_request(response.status_code)

# Test invalid mem_size_mib < 0.
response = test_microvm.machine_cfg.put(
mem_size_mib='-2'
)
assert test_microvm.api_session.is_status_bad_request(response.status_code)

# Test invalid type for ht_enabled flag.
response = test_microvm.machine_cfg.put(
ht_enabled='random_string'
Expand Down Expand Up @@ -259,6 +257,68 @@ def test_api_put_machine_config(test_microvm_with_api):
)
assert "CPU templates are not supported on aarch64" in response.text

# Test invalid mem_size_mib < 0.
response = test_microvm.machine_cfg.put(
mem_size_mib='-2'
)
assert test_microvm.api_session.is_status_bad_request(response.status_code)

# Test invalid mem_size_mib > usize::MAX.
bad_size = 1 << 64
response = test_microvm.machine_cfg.put(
mem_size_mib=bad_size
)
fail_msg = "error occurred when deserializing the json body of a " \
"request: invalid type"
assert test_microvm.api_session.is_status_bad_request(response.status_code)
assert fail_msg in response.text

# Test mem_size_mib of valid type, but too large.
test_microvm.basic_config()
firecracker_pid = int(test_microvm.jailer_clone_pid)
resource.prlimit(
firecracker_pid,
resource.RLIMIT_AS,
(MEM_LIMIT, resource.RLIM_INFINITY)
)

bad_size = (1 << 64) - 1
response = test_microvm.machine_cfg.patch(
mem_size_mib=bad_size
)
assert test_microvm.api_session.is_status_no_content(response.status_code)

response = test_microvm.actions.put(action_type='InstanceStart')
fail_msg = "Invalid Memory Configuration: MmapRegion(Mmap(Os { code: " \
"12, kind: Other, message: Out of memory }))"
assert test_microvm.api_session.is_status_bad_request(response.status_code)
assert fail_msg in response.text

# Test invalid mem_size_mib = 0.
response = test_microvm.machine_cfg.patch(
mem_size_mib=0
)
assert test_microvm.api_session.is_status_bad_request(response.status_code)
assert "The memory size (MiB) is invalid." in response.text

# Test valid mem_size_mib.
response = test_microvm.machine_cfg.patch(
mem_size_mib=256
)
assert test_microvm.api_session.is_status_no_content(response.status_code)

response = test_microvm.actions.put(action_type='InstanceStart')
if utils.get_cpu_vendor() != utils.CpuVendor.INTEL:
# We shouldn't be able to apply Intel templates on AMD hosts
fail_msg = "Internal error while starting microVM: Error configuring" \
" the vcpu for boot: Cpuid error: InvalidVendor"
assert test_microvm.api_session.is_status_bad_request(
response.status_code)
assert fail_msg in response.text
else:
assert test_microvm.api_session.is_status_no_content(
response.status_code)


def test_api_put_update_post_boot(test_microvm_with_api):
"""Test that PUT updates are rejected after the microvm boots."""
Expand Down

0 comments on commit 5898fe1

Please sign in to comment.