aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilo Casagrande <milo.casagrande@linaro.org>2014-12-08 10:53:52 +0100
committerMilo Casagrande <milo.casagrande@linaro.org>2014-12-08 10:53:52 +0100
commite3506d057b398c3a23f84ccc218407de956834cc (patch)
tree9310bfa2ab8ed0a265d6e753b1148f936df9f323
parenta57b51f7d8239120e8cdd08f972af8e79c894388 (diff)
Add from_json() to boot model.
Change-Id: I4bac3a4b6d065d27f1cfb4e35713b042fd456259
-rw-r--r--app/models/boot.py40
-rw-r--r--app/models/tests/test_boot_model.py137
2 files changed, 137 insertions, 40 deletions
diff --git a/app/models/boot.py b/app/models/boot.py
index 92c3dfc..022699a 100644
--- a/app/models/boot.py
+++ b/app/models/boot.py
@@ -13,6 +13,9 @@
"""The model that represents a boot document in the mongodb collection."""
+import copy
+import types
+
import models
import models.base as modb
@@ -72,7 +75,7 @@ class BootDocument(modb.BaseDocument):
self.dtb = None
self.dtb_addr = None
self.dtb_append = None
- self.endianness = None
+ self.endian = None
self.fastboot = False
self.fastboot_cmd = None
self.file_server_resource = None
@@ -199,7 +202,7 @@ class BootDocument(modb.BaseDocument):
models.DTB_ADDR_KEY: self.dtb_addr,
models.DTB_APPEND_KEY: self.dtb_append,
models.DTB_KEY: self.dtb,
- models.ENDIANNESS_KEY: self.endianness,
+ models.ENDIANNESS_KEY: self.endian,
models.FASTBOOT_CMD_KEY: self.fastboot_cmd,
models.FASTBOOT_KEY: self.fastboot,
models.FILE_SERVER_RESOURCE_KEY: self.file_server_resource,
@@ -232,4 +235,35 @@ class BootDocument(modb.BaseDocument):
@staticmethod
def from_json(json_obj):
- return None
+ boot_doc = None
+ if isinstance(json_obj, types.DictionaryType):
+ local_obj = copy.deepcopy(json_obj)
+ doc_pop = local_obj.pop
+
+ boot_id = doc_pop(models.ID_KEY, None)
+ doc_pop(models.NAME_KEY, None)
+
+ try:
+ board = doc_pop(models.BOARD_KEY)
+ job = doc_pop(models.JOB_KEY)
+ kernel = doc_pop(models.KERNEL_KEY)
+ defconfig = doc_pop(models.DEFCONFIG_KEY)
+ lab_name = doc_pop(models.LAB_NAME_KEY)
+ defconfig_full = doc_pop(models.DEFCONFIG_FULL_KEY, None)
+ arch = doc_pop(
+ models.ARCHITECTURE_KEY, models.ARM_ARCHITECTURE_KEY)
+
+ boot_doc = BootDocument(
+ board, job, kernel, defconfig, lab_name,
+ defconfig_full=defconfig_full,
+ arch=arch)
+
+ boot_doc.id = boot_id
+
+ for key, val in local_obj.iteritems():
+ setattr(boot_doc, key, val)
+ except KeyError:
+ # If a mandatory key is missing, just return None.
+ boot_doc = None
+
+ return boot_doc
diff --git a/app/models/tests/test_boot_model.py b/app/models/tests/test_boot_model.py
index 90c12a2..7fbc9f5 100644
--- a/app/models/tests/test_boot_model.py
+++ b/app/models/tests/test_boot_model.py
@@ -13,26 +13,26 @@
import unittest
-import models.base as modb
-import models.boot as modbt
+import models.base as mbase
+import models.boot as mboot
class TestBootModel(unittest.TestCase):
def test_boot_document_valid_instance(self):
- boot_doc = modbt.BootDocument(
- 'board', 'job', 'kernel', 'defconfig', 'lab'
+ boot_doc = mboot.BootDocument(
+ "board", "job", "kernel", "defconfig", "lab"
)
- self.assertIsInstance(boot_doc, modb.BaseDocument)
+ self.assertIsInstance(boot_doc, mbase.BaseDocument)
def test_boot_document_to_dict(self):
self.maxDiff = None
- boot_doc = modbt.BootDocument(
- 'board', 'job', 'kernel', 'defconfig', 'lab', arch='arm'
+ boot_doc = mboot.BootDocument(
+ "board", "job", "kernel", "defconfig", "lab", arch="arm"
)
- boot_doc.id = 'id'
- boot_doc.job_id = 'job-id'
- boot_doc.created_on = 'now'
+ boot_doc.id = "id"
+ boot_doc.job_id = "job-id"
+ boot_doc.created_on = "now"
boot_doc.defconfig_id = "defconfig_id"
boot_doc.retries = 10
boot_doc.version = "1.0"
@@ -52,33 +52,33 @@ class TestBootModel(unittest.TestCase):
boot_doc.board_instance = "instance"
expected = {
- '_id': 'id',
- 'board': 'board',
- 'boot_log': "boot-log",
- 'boot_log_html': "boot-log-html",
- 'boot_result_description': None,
- 'created_on': 'now',
- 'defconfig': 'defconfig',
- 'defconfig_id': "defconfig_id",
- 'dtb': None,
- 'dtb_addr': None,
- 'dtb_append': False,
- 'endian': None,
- 'fastboot': False,
- 'initrd_addr': None,
- 'job': 'job',
- 'job_id': 'job-id',
- 'kernel': 'kernel',
- 'kernel_image': None,
- 'lab_name': 'lab',
- 'load_addr': None,
- 'metadata': {},
- 'name': 'board-job-kernel-defconfig-arm',
- 'retries': 10,
- 'status': None,
- 'time': 0,
- 'version': "1.0",
- 'warnings': 2,
+ "_id": "id",
+ "board": "board",
+ "boot_log": "boot-log",
+ "boot_log_html": "boot-log-html",
+ "boot_result_description": None,
+ "created_on": "now",
+ "defconfig": "defconfig",
+ "defconfig_id": "defconfig_id",
+ "dtb": None,
+ "dtb_addr": None,
+ "dtb_append": False,
+ "endian": None,
+ "fastboot": False,
+ "initrd_addr": None,
+ "job": "job",
+ "job_id": "job-id",
+ "kernel": "kernel",
+ "kernel_image": None,
+ "lab_name": "lab",
+ "load_addr": None,
+ "metadata": {},
+ "name": "board-job-kernel-defconfig-arm",
+ "retries": 10,
+ "status": None,
+ "time": 0,
+ "version": "1.0",
+ "warnings": 2,
"git_commit": "git-commit",
"git_branch": "git-branch",
"git_describe": "git-describe",
@@ -93,3 +93,66 @@ class TestBootModel(unittest.TestCase):
}
self.assertDictEqual(expected, boot_doc.to_dict())
+
+ def test_boot_doc_from_json_missing_key(self):
+ boot_json = {
+ "_id": "id",
+ "name": "boot-name",
+ "status": "PASS",
+ "warnings": 0
+ }
+
+ self.assertIsNone(mboot.BootDocument.from_json(boot_json))
+
+ def test_boot_doc_from_json_wrong_type(self):
+ self.assertIsNone(mboot.BootDocument.from_json([]))
+ self.assertIsNone(mboot.BootDocument.from_json(()))
+ self.assertIsNone(mboot.BootDocument.from_json(""))
+
+ def test_boot_doc_from_json(self):
+ self.maxDiff = None
+ boot_json = {
+ "_id": "id",
+ "arch": "arm",
+ "board": "board",
+ "board_instance": "instance",
+ "boot_log": "boot-log",
+ "boot_log_html": "boot-log-html",
+ "boot_result_description": "desc",
+ "created_on": "now",
+ "defconfig": "defconfig",
+ "defconfig_full": "defconfig_full",
+ "defconfig_id": "defconfig_id",
+ "dtb": "dtb_val",
+ "dtb_addr": "1234",
+ "dtb_append": False,
+ "endian": "little",
+ "fastboot": False,
+ "fastboot_cmd": "fastboot",
+ "file_server_resource": "file-resource",
+ "file_server_url": "file-server",
+ "git_branch": "git-branch",
+ "git_commit": "git-commit",
+ "git_describe": "git-describe",
+ "git_url": "git-url",
+ "initrd": "initrd",
+ "initrd_addr": "1234",
+ "job": "job",
+ "job_id": "job-id",
+ "kernel": "kernel",
+ "kernel_image": "kernel_image",
+ "lab_name": "lab",
+ "load_addr": "12345",
+ "metadata": {"foo": "bar"},
+ "name": "board-job-kernel-defconfig_full-arm",
+ "retries": 10,
+ "status": "PASS",
+ "time": 0,
+ "version": "1.0",
+ "warnings": 2
+ }
+
+ boot_doc = mboot.BootDocument.from_json(boot_json)
+
+ self.assertIsInstance(boot_doc, mboot.BootDocument)
+ self.assertDictEqual(boot_json, boot_doc.to_dict())