Check for html version of device in dummy; add TestDataStorage incidence from SMART

This commit is contained in:
Xavier Bustamante Talavera 2018-10-23 22:54:27 +02:00
parent 6b7db37587
commit fa7c4d10cf
2 changed files with 28 additions and 4 deletions

View File

@ -6,6 +6,7 @@ from typing import Set
import click import click
import click_spinner import click_spinner
import yaml import yaml
from ereuse_utils.test import ANY
from ereuse_devicehub.client import UserClient from ereuse_devicehub.client import UserClient
from ereuse_devicehub.db import db from ereuse_devicehub.db import db
@ -139,6 +140,11 @@ class Dummy:
res=m.Event) res=m.Event)
# todo Receive # todo Receive
user.get(res=Device, item=sample_pc) # Test
anonymous = self.app.test_client()
html, _ = anonymous.get(res=Device, item=sample_pc, accept=ANY)
assert 'intel core2 duo cpu' in html
# For netbook: to preapre -> torepair -> to dispose -> disposed # For netbook: to preapre -> torepair -> to dispose -> disposed
print('⭐ Done.') print('⭐ Done.')

View File

@ -745,11 +745,29 @@ class TestDataStorage(Test):
offline_uncorrectable = Column(SmallInteger) offline_uncorrectable = Column(SmallInteger)
remaining_lifetime_percentage = Column(SmallInteger) remaining_lifetime_percentage = Column(SmallInteger)
def __str__(self) -> str: def __init__(self, **kwargs) -> None:
return '{}. Lifetime of {:.1f} years'.format(inflection.humanize(self.status), super().__init__(**kwargs)
self.lifetime.days / 365) # As of https://www.backblaze.com/blog/hard-drive-smart-stats/ and
# https://www.backblaze.com/blog-smart-stats-2014-8.html
# We can guess some future disk failures by analyzing some
# SMART data
if (self.reallocated_sector_count or 0) > 10:
self.incidence = True
self.description = 'Warning: Chance of disk failure within a year.'
if (self.current_pending_sector_count or 0) > 40 \
and (self.reported_uncorrectable_errors or 0) > 10:
self.incidence = True
self.description = 'Warning: Chance of disk failure within a year.'
if not self.assessment:
self.incidence = True
self.description = 'Warning: Drive failure expected soon.'
# todo remove lifetime / passed_lifetime as I think they are the same def __str__(self) -> str:
t = inflection.humanize(self.status)
if self.lifetime:
t += ' with a lifetime of {:.1f} years.'.format(self.lifetime.days / 365)
t += self.description
return t
class StressTest(Test): class StressTest(Test):