提交 1cf60c46 编写于 作者: K Kalen Krempely 提交者: David Krieger

gpconfig: Fix unit tests due to refactor

上级 b6137171
import base64
import errno
import imp
import os
import pickle
import shutil
import sys
import tempfile
from StringIO import StringIO
import errno
from pygresql.pg import DatabaseError
from gppylib.gparray import Segment, GpArray, SegmentPair
from gppylib.gphostcache import GpHost
from gpconfig_modules.parse_guc_metadata import ParseGuc
from gparray import Segment, GpArray, SegmentPair
import shutil
from mock import *
from gp_unittest import *
from gphostcache import GpHost
from gpconfig_modules.parse_guc_metadata import ParseGuc
from mock import *
from pygresql.pg import DatabaseError
from StringIO import StringIO
db_singleton_side_effect_list = []
......@@ -66,15 +65,18 @@ class GpConfig(GpTestCase):
self.host_cache.get_hosts.return_value = [self.host]
self.host_cache.ping_hosts.return_value = []
self.master_read_config = Mock()
self.master_read_config.get_guc_value.return_value = "foo"
self.master_read_config.get_seg_content_id.return_value = -1
self.segment_read_config = Mock()
self.segment_read_config.get_guc_value.return_value = "foo"
self.segment_read_config.get_seg_content_id.return_value = 0
self.master_file = Mock(name='master')
self.master_file.get_value.return_value = 'foo'
self.master_file.segInfo.getSegmentContentId.return_value = -1
self.master_file.segInfo.getSegmentDbId.return_value = 0
self.seg0_file = Mock(name='seg0')
self.seg0_file.get_value.return_value = 'foo'
self.seg0_file.segInfo.getSegmentContentId.return_value = 0
self.seg0_file.segInfo.getSegmentDbId.return_value = 1
self.pool = Mock()
self.pool.getCompletedItems.return_value = [self.master_read_config, self.segment_read_config]
self.pool.getCompletedItems.return_value = [self.master_file, self.seg0_file]
self.apply_patches([
patch('os.environ', new=self.os_env),
......@@ -127,6 +129,8 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_show_with_port_will_succeed(self, mock_stdout):
sys.argv = ["gpconfig", "--show", "port"]
# mocked database values
# select * from gp_toolkit.gp_param_setting('port'); ;
# paramsegment | paramname | paramvalue
# --------------+-----------+------------
......@@ -175,7 +179,7 @@ class GpConfig(GpTestCase):
self.subject.do_main()
self.pool.addCommand.assert_called_once_with(self.master_read_config)
self.pool.addCommand.assert_called_once()
self.pool.join.assert_called_once_with()
self.pool.check_results.assert_called_once_with()
self.pool.haltWork.assert_called_once_with()
......@@ -186,8 +190,8 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_f_will_report_absence_of_setting_on_master(self, mock_stdout):
sys.argv = ["gpconfig", "--show", "my_property_name", "--file"]
self.master_read_config.get_guc_value.return_value = None
self.segment_read_config.get_guc_value.return_value = "seg_value"
self.master_file.get_value.return_value = None
self.seg0_file.get_value.return_value = "seg_value"
self.subject.do_main()
......@@ -197,8 +201,8 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_f_will_report_absence_of_setting_on_segment(self, mock_stdout):
sys.argv = ["gpconfig", "--show", "my_property_name", "--file"]
self.master_read_config.get_guc_value.return_value = "master_value"
self.segment_read_config.get_guc_value.return_value = None
self.master_file.get_value.return_value = "master_value"
self.seg0_file.get_value.return_value = None
self.subject.do_main()
......@@ -208,8 +212,8 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_f_will_report_absence_of_setting_on_both(self, mock_stdout):
sys.argv = ["gpconfig", "--show", "my_property_name", "--file"]
self.master_read_config.get_guc_value.return_value = None
self.segment_read_config.get_guc_value.return_value = None
self.master_file.get_value.return_value = None
self.seg0_file.get_value.return_value = None
self.subject.do_main()
......@@ -219,12 +223,18 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_f_will_report_difference_segments_out_of_sync(self, mock_stdout):
sys.argv = ["gpconfig", "--show", "my_property_name", "--file"]
self.master_read_config.get_guc_value.return_value = 'foo'
self.segment_read_config.get_guc_value.return_value = 'bar'
another_segment_read_config = Mock()
another_segment_read_config.get_guc_value.return_value = "baz"
another_segment_read_config.get_seg_content_id.return_value = 1
self.pool.getCompletedItems.return_value.append(another_segment_read_config)
self.master_file.get_value.return_value = 'foo'
self.seg0_file.get_value.return_value = 'bar'
seg_1 = Mock(name='seg1')
seg_1.segInfo.getSegmentContentId.return_value = 1
seg_1.segInfo.getSegmentDbId.return_value = 2
seg_1.get_value.return_value = 'baz'
# mocked values in the files
self.pool.getCompletedItems.return_value.append(seg_1)
self.host_cache.get_hosts.return_value.extend([self.host, self.host])
self.subject.do_main()
......@@ -238,12 +248,18 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_f_will_report_difference_segments_out_of_sync_when_unset(self, mock_stdout):
sys.argv = ["gpconfig", "--show", "my_property_name", "--file"]
self.master_read_config.get_guc_value.return_value = 'foo'
self.segment_read_config.get_guc_value.return_value = 'bar'
another_segment_read_config = Mock()
another_segment_read_config.get_guc_value.return_value = None
another_segment_read_config.get_seg_content_id.return_value = 1
self.pool.getCompletedItems.return_value.append(another_segment_read_config)
self.master_file.get_value.return_value = 'foo'
self.seg0_file.get_value.return_value = 'bar'
seg_1 = Mock(name='seg1')
seg_1.segInfo.getSegmentContentId.return_value = 1
seg_1.segInfo.getSegmentDbId.return_value = 2
seg_1.get_value.return_value = None
# mocked values in the files
self.pool.getCompletedItems.return_value.append(seg_1)
self.host_cache.get_hosts.return_value.extend([self.host, self.host])
self.subject.do_main()
......@@ -258,6 +274,8 @@ class GpConfig(GpTestCase):
db_singleton_side_effect_list.append("some happy result")
entry = 'my_property_name'
sys.argv = ["gpconfig", "-c", entry, "-v", "100", "-m", "20"]
# mocked database values
# 'SELECT name, setting, unit, short_desc, context, vartype, min_val, max_val FROM pg_settings'
self.cursor.set_result_for_testing([['my_property_name', 'setting', 'unit', 'short_desc',
'context', 'vartype', 'min_val', 'max_val']])
......@@ -279,6 +297,8 @@ class GpConfig(GpTestCase):
db_singleton_side_effect_list.append("some happy result")
entry = 'my_property_name'
sys.argv = ["gpconfig", "-c", entry, "-v", "100", "--masteronly"]
# mocked database values
# 'SELECT name, setting, unit, short_desc, context, vartype, min_val, max_val FROM pg_settings'
self.cursor.set_result_for_testing([['my_property_name', 'setting', 'unit', 'short_desc',
'context', 'vartype', 'min_val', 'max_val']])
......@@ -329,17 +349,16 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_file_compare_returns_same_value(self, mock_stdout):
sys.argv = ["gpconfig", "-s", "my_property_name", "--file-compare"]
self.master_read_config.get_guc_value.return_value = 'foo'
self.master_read_config.get_seg_content_id.return_value = -1
self.segment_read_config.get_guc_value.return_value = 'foo'
self.segment_read_config.get_seg_content_id.return_value = 0
seg_1 = Mock(name='seg1')
seg_1.segInfo.getSegmentContentId.return_value = 1
seg_1.segInfo.getSegmentDbId.return_value = 2
seg_1.get_value.return_value = 'foo'
another_segment_read_config = Mock()
another_segment_read_config.get_guc_value.return_value = "foo"
another_segment_read_config.get_seg_content_id.return_value = 1
self.pool.getCompletedItems.return_value.append(another_segment_read_config)
# mocked values in the files
self.pool.getCompletedItems.return_value.append(seg_1)
# mocked database values
self.cursor.set_result_for_testing([[-1, 'my_property_name', 'foo'],
[0, 'my_property_name', 'foo'],
[1, 'my_property_name', 'foo']])
......@@ -353,17 +372,19 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_file_compare_works_with_unset_values(self, mock_stdout):
sys.argv = ["gpconfig", "-s", "my_property_name", "--file-compare"]
self.master_read_config.get_guc_value.return_value = None
self.master_read_config.get_seg_content_id.return_value = -1
self.segment_read_config.get_guc_value.return_value = None
self.segment_read_config.get_seg_content_id.return_value = 0
self.master_file.get_value.return_value = None
self.seg0_file.get_value.return_value = None
another_segment_read_config = Mock()
another_segment_read_config.get_guc_value.return_value = None
another_segment_read_config.get_seg_content_id.return_value = 1
self.pool.getCompletedItems.return_value.append(another_segment_read_config)
seg_1 = Mock(name='seg1')
seg_1.segInfo.getSegmentContentId.return_value = 1
seg_1.segInfo.getSegmentDbId.return_value = 2
seg_1.get_value.return_value = None
# mocked values in the files
self.pool.getCompletedItems.return_value.append(seg_1)
# mocked database values
self.cursor.set_result_for_testing([[-1, 'my_property_name', 'foo'],
[0, 'my_property_name', 'foo'],
[1, 'my_property_name', 'foo']])
......@@ -377,20 +398,16 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_file_compare_returns_different_value(self, mock_stdout):
sys.argv = ["gpconfig", "-s", "my_property_name", "--file-compare"]
self.master_read_config.get_guc_value.return_value = 'foo'
self.master_read_config.get_seg_content_id.return_value = -1
self.master_read_config.get_seg_dbid.return_value = 0
self.segment_read_config.get_guc_value.return_value = 'foo'
self.segment_read_config.get_seg_content_id.return_value = 0
self.segment_read_config.get_seg_dbid.return_value = 1
seg_1 = Mock(name='seg1')
seg_1.segInfo.getSegmentContentId.return_value = 1
seg_1.segInfo.getSegmentDbId.return_value = 2
seg_1.get_value.return_value = 'bar'
another_segment_read_config = Mock()
another_segment_read_config.get_guc_value.return_value = "bar"
another_segment_read_config.get_seg_content_id.return_value = 1
another_segment_read_config.get_seg_dbid.return_value = 2
self.pool.getCompletedItems.return_value.append(another_segment_read_config)
# mocked values in the files
self.pool.getCompletedItems.return_value.append(seg_1)
# mocked database values
self.cursor.set_result_for_testing([[-1, 'my_property_name', 'foo'],
[0, 'my_property_name', 'foo'],
[1, 'my_property_name', 'foo']])
......@@ -408,20 +425,16 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_file_compare_with_unset_values_on_some_segments(self, mock_stdout):
sys.argv = ["gpconfig", "-s", "my_property_name", "--file-compare"]
self.master_read_config.get_guc_value.return_value = 'foo'
self.master_read_config.get_seg_content_id.return_value = -1
self.master_read_config.get_seg_dbid.return_value = 0
self.segment_read_config.get_guc_value.return_value = 'foo'
self.segment_read_config.get_seg_content_id.return_value = 0
self.segment_read_config.get_seg_dbid.return_value = 1
seg2_file = Mock(name='seg2')
seg2_file.segInfo.getSegmentContentId.return_value = 1
seg2_file.segInfo.getSegmentDbId.return_value = 2
seg2_file.get_value.return_value = None
another_segment_read_config = Mock()
another_segment_read_config.get_guc_value.return_value = None
another_segment_read_config.get_seg_content_id.return_value = 1
another_segment_read_config.get_seg_dbid.return_value = 2
self.pool.getCompletedItems.return_value.append(another_segment_read_config)
# mocked values in the files
self.pool.getCompletedItems.return_value.append(seg2_file)
# mocked database values
self.cursor.set_result_for_testing([[-1, 'my_property_name', 'foo'],
[0, 'my_property_name', 'foo'],
[1, 'my_property_name', 'foo']])
......@@ -439,20 +452,17 @@ class GpConfig(GpTestCase):
@patch('sys.stdout', new_callable=StringIO)
def test_option_file_compare_with_standby_master_with_different_file_value_will_report_failure(self, mock_stdout):
sys.argv = ["gpconfig", "-s", "my_property_name", "--file-compare"]
standby_master = Mock(name='standby_master')
standby_master.segInfo.getSegmentContentId.return_value = -1
standby_master.segInfo.getSegmentDbId.return_value = 2
standby_master.get_value.return_value = 'bar'
# mocked values in the files
self.pool.getCompletedItems.return_value.append(standby_master)
# mocked database values
self.cursor.set_result_for_testing([[-1, 'my_property_name', 'foo']])
self.master_read_config.get_guc_value.return_value = 'foo'
self.master_read_config.get_seg_content_id.return_value = -1
self.master_read_config.get_seg_dbid.return_value = 0
# standby mirror with bad file value
self.segment_read_config.get_guc_value.return_value = 'foo'
self.segment_read_config.get_seg_content_id.return_value = 0
self.segment_read_config.get_seg_dbid.return_value = 1
standby_segment_read_config = Mock()
standby_segment_read_config.get_guc_value.return_value = "bar"
standby_segment_read_config.get_seg_content_id.return_value = -1
standby_segment_read_config.get_seg_dbid.return_value = 2
self.pool.getCompletedItems.return_value.append(standby_segment_read_config)
self.subject.do_main()
......@@ -516,6 +526,8 @@ class GpConfig(GpTestCase):
sys.argv = ["gpconfig", "--change", "my_property_name", "--value", value]
if additional_args:
sys.argv.extend(additional_args)
# mocked database values
self.cursor.set_result_for_testing([['my_property_name', 'setting', 'unit', 'short_desc',
'context', vartype, 'min_val', 'max_val']])
......@@ -564,6 +576,8 @@ class GpConfig(GpTestCase):
db_singleton_side_effect_list.append("some happy result")
entry = 'my_property_name'
sys.argv = ["gpconfig", "-c", entry, "-v", "100", "--masteronly"]
# mocked database values
# 'SELECT name, setting, unit, short_desc, context, vartype, min_val, max_val FROM pg_settings'
self.cursor.set_result_for_testing([['my_property_name', 'setting', 'unit', 'short_desc',
'context', 'vartype', 'min_val', 'max_val']])
......@@ -582,6 +596,8 @@ class GpConfig(GpTestCase):
def test_gpconfig_logs_successful_guc_change(self):
sys.argv = ["gpconfig", "-c", 'my_property_name', "-v", "100", "--masteronly"]
# mocked database values
self.cursor.set_result_for_testing([['my_property_name', 'setting', 'unit', 'short_desc',
'context', 'vartype', 'min_val', 'max_val']])
......@@ -591,9 +607,11 @@ class GpConfig(GpTestCase):
def test_gpconfig_logs_unsuccessful_guc_change(self):
sys.argv = ["gpconfig", "-c", 'my_property_name', "-v", "100", "--masteronly"]
# mocked database values
self.cursor.set_result_for_testing([['my_property_name', 'setting', 'unit', 'short_desc',
'context', 'vartype', 'min_val', 'max_val']])
self.segment_read_config.was_successful.return_value = False
self.seg0_file.was_successful.return_value = False
self.subject.do_main()
self.subject.LOGGER.error.assert_called_with("finished with errors, parameter string '-c my_property_name -v 100 --masteronly'")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册