blob: dc58cc72a54d2844d708dd3f47c86e891f656f59 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittests for export_to_gcloud."""
from __future__ import print_function
import io
from gcloud import datastore # pylint: disable=import-error
from chromite.lib import cros_test_lib
from chromite.scripts import export_to_gcloud
class GetEntitiesTest(cros_test_lib.TestCase):
"""Test that GetEntities behaves correctly."""
_BASIC_JSON = """{"id": ["Foo", 1], "foo": "bar"}
{"id": ["Bar", 1], "bar": "baz"}
{"id": ["Bar", 2], "foo": "qux", "parent": ["Bar", 1]}"""
_DUPE_KEY_JSON = _BASIC_JSON + '\n{"id": ["Bar", 1], "bar": "baz"}'
def testBasicFunctionality(self):
"""Tests that GetEntities handles well formed input as expected."""
p = 'foo_project'
with io.BytesIO(self._BASIC_JSON) as f:
entities = list(export_to_gcloud.GetEntities(p, f))
self.assertEqual(len(entities), 3)
self.assertEqual(
entities[0].key, datastore.key.Key('Foo', 1, project=p))
self.assertEqual(
entities[2].key, datastore.key.Key('Bar', 1, 'Bar', 2, project=p))
def testOuterParent(self):
"""Tests that GetEntities handles outer_parent_key as expected."""
p = 'foo_project'
par_id = datastore.key.Key('Parent', 1, project=p)
with io.BytesIO(self._BASIC_JSON) as f:
entities = list(export_to_gcloud.GetEntities(p, f,
outer_parent_key=par_id))
self.assertEqual(len(entities), 3)
self.assertEqual(
entities[0].key, datastore.key.Key('Parent', 1, 'Foo', 1, project=p))
self.assertEqual(
entities[2].key,
datastore.key.Key('Parent', 1, 'Bar', 1, 'Bar', 2, project=p))
def testNamespace(self):
"""Tests that GetEntities handles namespace as expected."""
p = 'foo_project'
n = 'foo_namespace'
with io.BytesIO(self._BASIC_JSON) as f:
entities = list(export_to_gcloud.GetEntities(p, f, namespace=n))
self.assertEqual(len(entities), 3)
self.assertEqual(
entities[0].key, datastore.key.Key('Foo', 1, project=p, namespace=n))
self.assertEqual(
entities[2].key,
datastore.key.Key('Bar', 1, 'Bar', 2, project=p, namespace=n))
def testDuplicateKey(self):
"""Tests that GetEntities throws a ValueError on duplicate keys."""
p = 'foo_project'
with self.assertRaises(export_to_gcloud.DuplicateKeyError):
with io.BytesIO(self._DUPE_KEY_JSON) as f:
list(export_to_gcloud.GetEntities(p, f))