Merge pull request #91 from eReuse/bugfix/88-action-end_time

Bugfix/88 action end time
This commit is contained in:
cayop 2020-12-10 11:11:22 +01:00 committed by GitHub
commit 2cb4d6e406
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 184 additions and 4 deletions

View file

@ -15,3 +15,4 @@ ml).
- [addend] #87 allocate, deallocate and live actions - [addend] #87 allocate, deallocate and live actions
- [fixed] #89 save json on disk only for shapshots - [fixed] #89 save json on disk only for shapshots
- [addend] #83 add owner_id in all kind of device - [addend] #83 add owner_id in all kind of device
- [fixed] #91 The most old time allow is 1970-01-01

View file

@ -41,6 +41,15 @@ class Action(Thing):
parent = NestedOn(s_device.Computer, dump_only=True, description=m.Action.parent_id.comment) parent = NestedOn(s_device.Computer, dump_only=True, description=m.Action.parent_id.comment)
url = URL(dump_only=True, description=m.Action.url.__doc__) url = URL(dump_only=True, description=m.Action.url.__doc__)
@validates_schema
def validate_times(self, data: dict):
unix_time = datetime.fromisoformat("1970-01-02 00:00:00+00:00")
if 'end_time' in data and data['end_time'] < unix_time:
data['end_time'] = unix_time
if 'start_time' in data and data['start_time'] < unix_time:
data['start_time'] = unix_time
class ActionWithOneDevice(Action): class ActionWithOneDevice(Action):
__doc__ = m.ActionWithOneDevice.__doc__ __doc__ = m.ActionWithOneDevice.__doc__

View file

@ -0,0 +1,135 @@
{
"closed": true,
"components": [
{
"actions": [],
"manufacturer": "Intel Corporation",
"model": "NM10/ICH7 Family High Definition Audio Controller",
"serialNumber": null,
"type": "SoundCard"
},
{
"actions": [],
"manufacturer": "Azurewave",
"model": "USB 2.0 UVC VGA WebCam",
"serialNumber": "0x0001",
"type": "SoundCard"
},
{
"actions": [],
"format": "DIMM",
"interface": "DDR2",
"manufacturer": null,
"model": null,
"serialNumber": null,
"size": 1024,
"speed": 667.0,
"type": "RamModule"
},
{
"address": 64,
"cores": 1,
"actions": [
{
"elapsed": 165,
"rate": 164.8342,
"type": "BenchmarkProcessorSysbench"
},
{
"elapsed": 0,
"rate": 6665.7,
"type": "BenchmarkProcessor"
}
],
"manufacturer": "Intel Corp.",
"model": "Intel Atom CPU N455 @ 1.66GHz",
"serialNumber": null,
"speed": 1.667,
"threads": 2,
"type": "Processor"
},
{
"actions": [
{
"elapsed": 16,
"readSpeed": 66.2,
"type": "BenchmarkDataStorage",
"writeSpeed": 21.8
}
],
"interface": "ATA",
"manufacturer": "Hitachi",
"model": "HTS54322",
"serialNumber": "E2024242CV86HJ",
"size": 238475,
"type": "HardDrive"
},
{
"actions": [],
"manufacturer": "Qualcomm Atheros",
"model": "AR9285 Wireless Network Adapter",
"serialNumber": "74:2f:68:8b:fd:c8",
"type": "NetworkAdapter",
"wireless": true
},
{
"actions": [],
"manufacturer": "Qualcomm Atheros",
"model": "AR8152 v2.0 Fast Ethernet",
"serialNumber": "14:da:e9:42:f6:7c",
"speed": 100,
"type": "NetworkAdapter",
"wireless": false
},
{
"actions": [],
"manufacturer": "Intel Corporation",
"memory": 256.0,
"model": "Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller",
"serialNumber": null,
"type": "GraphicCard"
},
{
"actions": [
{
"type": "TestBios",
"accessRange": "A",
}
],
"firewire": 0,
"manufacturer": "ASUSTeK Computer INC.",
"model": "1001PXD",
"pcmcia": 0,
"serial": 1,
"serialNumber": "Eee0123456789",
"slots": 2,
"type": "Motherboard",
"usb": 5
}
],
"device": {
"chassis": "Netbook",
"actions": [
{
"elapsed": 16,
"rate": 15.8978,
"type": "BenchmarkRamSysbench"
},
{
"appearanceRange": "A",
"functionalityRange": "A",
"type": "VisualTest"
}
],
"manufacturer": "ASUSTeK Computer INC.",
"model": "1001PXD",
"serialNumber": "B8OAAS048286",
"type": "Laptop"
},
"elapsed": 6,
"endTime": "0001-01-01 00:00:00+00:00",
"software": "Workbench",
"type": "Snapshot",
"uuid": "7dc4d19c-914e-4652-a381-d641325fb9c2",
"version": "11.0a6"
}

View file

@ -3,6 +3,7 @@ import copy
import pytest import pytest
from datetime import datetime, timedelta from datetime import datetime, timedelta
from dateutil.tz import tzutc
from decimal import Decimal from decimal import Decimal
from typing import Tuple, Type from typing import Tuple, Type
@ -502,8 +503,8 @@ def test_allocate_bad_dates(user: UserClient):
""" Tests allocate """ """ Tests allocate """
snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot) snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot)
device_id = snapshot['device']['id'] device_id = snapshot['device']['id']
delta = timedelta(days=30) delay = timedelta(days=30)
future = datetime.now() + delta future = datetime.now().replace(tzinfo=tzutc()) + delay
post_request = {"transaction": "ccc", post_request = {"transaction": "ccc",
"finalUserCode": "aabbcc", "finalUserCode": "aabbcc",
"name": "John", "name": "John",
@ -556,8 +557,8 @@ def test_deallocate_bad_dates(user: UserClient):
""" Tests deallocate with bad date of start_time """ """ Tests deallocate with bad date of start_time """
snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot) snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot)
device_id = snapshot['device']['id'] device_id = snapshot['device']['id']
delta = timedelta(days=30) delay = timedelta(days=30)
future = datetime.now() + delta future = datetime.now().replace(tzinfo=tzutc()) + delay
post_deallocate = {"startTime": future, post_deallocate = {"startTime": future,
"devices": [device_id] "devices": [device_id]
} }

View file

@ -729,3 +729,37 @@ def test_snapshot_failed_missing_chassis(app: Devicehub, user: UserClient):
assert snapshot['version'] == snapshot_error['version'] assert snapshot['version'] == snapshot_error['version']
assert snapshot['uuid'] == uuid assert snapshot['uuid'] == uuid
@pytest.mark.mvp
def test_snapshot_failed_end_time_bug(app: Devicehub, user: UserClient):
""" This test check if the end_time = 0001-01-01 00:00:00+00:00
and then we get a /devices, this create a crash
"""
snapshot_file = file('asus-end_time_bug88.snapshot')
snapshot, _ = user.post(res=Snapshot, data=snapshot_file)
device, _ = user.get(res=m.Device, item=snapshot['device']['id'])
end_times = [x['endTime'] for x in device['actions']]
assert '1970-01-02T00:00:00+00:00' in end_times
assert not '0001-01-01T00:00:00+00:00' in end_times
tmp_snapshots = app.config['TMP_SNAPSHOTS']
shutil.rmtree(tmp_snapshots)
@pytest.mark.mvp
def test_snapshot_not_failed_end_time_bug(app: Devicehub, user: UserClient):
""" This test check if the end_time != 0001-01-01 00:00:00+00:00
and then we get a /devices, this create a crash
"""
snapshot_file = file('asus-end_time_bug88.snapshot')
snapshot_file['endTime'] = '2001-01-01 00:00:00+00:00'
snapshot, _ = user.post(res=Snapshot, data=snapshot_file)
device, _ = user.get(res=m.Device, item=snapshot['device']['id'])
end_times = [x['endTime'] for x in device['actions']]
assert not '1970-01-02T00:00:00+00:00' in end_times
assert not '0001-01-01T00:00:00+00:00' in end_times
assert '2001-01-01T00:00:00+00:00' in end_times
tmp_snapshots = app.config['TMP_SNAPSHOTS']
shutil.rmtree(tmp_snapshots)