blob: 071af119b27b7d596786639f8f14d5c2fda9c7e4 [file] [log] [blame]
Andrew Lamb16f02bf2019-11-04 14:44:34 -07001# -*- coding: utf-8 -*-
2# Copyright 2019 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Unit tests for replication_util."""
7
8from __future__ import print_function
9
10import json
11import os
12
13from google.protobuf import json_format
14
15from chromite.api.gen.config.replication_config_pb2 import (
16 ReplicationConfig, FileReplicationRule, FILE_TYPE_OTHER,
17 REPLICATION_TYPE_COPY)
18from chromite.lib import cros_test_lib
19from chromite.lib import osutils
20from chromite.scripts import replication_util
21
22D = cros_test_lib.Directory
23
24
25class RunTest(cros_test_lib.TempDirTestCase):
26 """Tests of the run command.
27
28 Note that detailed tests of replication behavior should be done in
29 replication_lib_unittest.
30 """
31
32 def setUp(self):
33 file_layout = (D('src', ['audio_file']),)
34 cros_test_lib.CreateOnDiskHierarchy(self.tempdir, file_layout)
35
36 self.audio_path = os.path.join(self.tempdir, 'src', 'audio_file')
37 osutils.WriteFile(self.audio_path, '[Speaker A Settings]')
38
39 def testRun(self):
Mike Frysingerdf1d0b02019-11-12 17:44:12 -050040 """Basic test of the 'run' command."""
Andrew Lamb16f02bf2019-11-04 14:44:34 -070041 audio_dst_path = os.path.join(self.tempdir, 'dst', 'audio_file')
42
43 replication_config = ReplicationConfig(file_replication_rules=[
44 FileReplicationRule(
45 source_path=self.audio_path,
46 destination_path=audio_dst_path,
47 file_type=FILE_TYPE_OTHER,
48 replication_type=REPLICATION_TYPE_COPY,
49 ),
50 ])
51
52 replication_config_path = os.path.join(self.tempdir,
53 'replication_config.jsonpb')
54 osutils.WriteFile(replication_config_path,
55 json_format.MessageToJson(replication_config))
56
57 replication_util.main(['run', replication_config_path])
58
59 expected_file_layout = (
60 D('src', ['audio_file']),
61 D('dst', ['audio_file']),
62 'replication_config.jsonpb',
63 )
64
65 cros_test_lib.VerifyOnDiskHierarchy(self.tempdir, expected_file_layout)
66
67 self.assertFileContents(audio_dst_path, '[Speaker A Settings]')
68
69 def testUnknownFieldInConfig(self):
70 """Test that unknown fields in the ReplicationConfig cause an error."""
71 audio_dst_path = os.path.join(self.tempdir, 'dst', 'audio_file')
72
73 replication_config = ReplicationConfig(file_replication_rules=[
74 FileReplicationRule(
75 source_path=self.audio_path,
76 destination_path=audio_dst_path,
77 file_type=FILE_TYPE_OTHER,
78 replication_type=REPLICATION_TYPE_COPY,
79 ),
80 ])
81
82 replication_config_path = os.path.join(self.tempdir,
83 'replication_config.jsonpb')
84 replication_config_dict = json_format.MessageToDict(replication_config)
85 replication_config_dict['new_field'] = 1
86 osutils.WriteFile(replication_config_path,
87 json.dumps(replication_config_dict))
88
89 with self.assertRaises(json_format.ParseError):
90 replication_util.main(['run', replication_config_path])