Merge pull request #91 from eReuse/bugfix/88-action-end_time
Bugfix/88 action end time
This commit is contained in:
commit
2cb4d6e406
|
@ -15,3 +15,4 @@ ml).
|
|||
- [addend] #87 allocate, deallocate and live actions
|
||||
- [fixed] #89 save json on disk only for shapshots
|
||||
- [addend] #83 add owner_id in all kind of device
|
||||
- [fixed] #91 The most old time allow is 1970-01-01
|
||||
|
|
|
@ -41,6 +41,15 @@ class Action(Thing):
|
|||
parent = NestedOn(s_device.Computer, dump_only=True, description=m.Action.parent_id.comment)
|
||||
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):
|
||||
__doc__ = m.ActionWithOneDevice.__doc__
|
||||
|
|
|
@ -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"
|
||||
}
|
|
@ -3,6 +3,7 @@ import copy
|
|||
import pytest
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from dateutil.tz import tzutc
|
||||
from decimal import Decimal
|
||||
from typing import Tuple, Type
|
||||
|
||||
|
@ -502,8 +503,8 @@ def test_allocate_bad_dates(user: UserClient):
|
|||
""" Tests allocate """
|
||||
snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot)
|
||||
device_id = snapshot['device']['id']
|
||||
delta = timedelta(days=30)
|
||||
future = datetime.now() + delta
|
||||
delay = timedelta(days=30)
|
||||
future = datetime.now().replace(tzinfo=tzutc()) + delay
|
||||
post_request = {"transaction": "ccc",
|
||||
"finalUserCode": "aabbcc",
|
||||
"name": "John",
|
||||
|
@ -556,8 +557,8 @@ def test_deallocate_bad_dates(user: UserClient):
|
|||
""" Tests deallocate with bad date of start_time """
|
||||
snapshot, _ = user.post(file('basic.snapshot'), res=models.Snapshot)
|
||||
device_id = snapshot['device']['id']
|
||||
delta = timedelta(days=30)
|
||||
future = datetime.now() + delta
|
||||
delay = timedelta(days=30)
|
||||
future = datetime.now().replace(tzinfo=tzutc()) + delay
|
||||
post_deallocate = {"startTime": future,
|
||||
"devices": [device_id]
|
||||
}
|
||||
|
|
|
@ -729,3 +729,37 @@ def test_snapshot_failed_missing_chassis(app: Devicehub, user: UserClient):
|
|||
assert snapshot['version'] == snapshot_error['version']
|
||||
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)
|
||||
|
|
Reference in New Issue