Update specs to 2013.2.3 version openstack-ci/fuel-4.1.1/2013.2.3
authorDmitry Burmistrov <dburmistrov@mirantis.com>
Thu, 15 May 2014 18:07:25 +0000 (22:07 +0400)
committerDmitry Burmistrov <dburmistrov@mirantis.com>
Thu, 15 May 2014 18:30:14 +0000 (22:30 +0400)
Change-Id: Ifb44f4a3275648da44a06db12dc1f3a0a069fd59

debian/changelog
debian/patches/fix-setup-requirements.patch
debian/patches/revert-keystone-compat-2.patch [new file with mode: 0644]
debian/patches/revert-keystone-compat.patch
debian/patches/revert-stable-havana-requirements.patch [new file with mode: 0644]
debian/patches/series
debian/patches/skip-database-tests.patch
rpm/SOURCES/0001-Ensure-we-don-t-access-the-net-when-building-docs.patch
rpm/SPECS/openstack-ceilometer.spec

index 15c2c0f8aa7cf48f04c1950c1896250a83222b3b..f805f27c1cf77af121ce0780e5bb2ad83fb9eb1f 100644 (file)
@@ -1,8 +1,87 @@
-ceilometer (2013.2-0ubuntu1~cloud0) precise-havana; urgency=low
+ceilometer (2013.2.3-0ubuntu1~cloud0) precise-havana; urgency=medium
 
   * New upstream release for the Ubuntu Cloud Archive.
 
- -- James Page <james.page@ubuntu.com>  Mon, 14 Oct 2013 15:29:44 +0100
+ -- Openstack Ubuntu Testing Bot <openstack-testing-bot@ubuntu.com>  Mon, 14 Apr 2014 07:15:52 -0400
+
+ceilometer (2013.2.3-0ubuntu1) saucy-proposed; urgency=medium
+
+  * debian/patches/fix-setup-requirements.patch: Rebase on top of
+    new upstream requirements.txt file.
+  * Resynchronize with stable/havana (0ac6942) (LP: #1302575):
+    - [c92c106] latest alembic imcompatible with current sqlalchemy requirements
+    - [4ffeead] User a more accurate max_delay for reconnects
+    - [6637acd] Checks for presence of Hyper-V cpu metrics before accessing
+    - [7cb5f4c] Fix ceilometer.conf.sample mismatch
+    - [ebe72d5] Fixes Hyper-V Inspector disk metrics bug
+    - [bbab3d5] Fix validation error for invalid field name in simple query
+    - [83a2725] Adds doc string to query validate functions in V2 API
+    - [4461828] Ensure insecure config option propagated by alarm service
+    - [0a1db09] Fix the default rpc policy value
+    - [b13ee97] Ensure the correct error message is displayed
+    - [2c6a84f] Refactor timestamp existence validation in V2 API
+    - [ff0375c] cacert is not picked up correctly by alarm services
+    - [0a85f22] Add an insecure option for Keystone client
+    - [0ac6942] Propogate cacert and insecure flags to glanceclient
+
+ -- Corey Bryant <corey.bryant@canonical.com>  Fri, 04 Apr 2014 12:02:50 -0400
+
+ceilometer (2013.2.2-0ubuntu1) saucy-proposed; urgency=low
+
+  * Resynchronize with stable/havana (9149861) (LP: #1284643):
+    - [a3da4dc] instance.scheduled meter is never persisted LP: 1262255
+    - [3089be8] first & last sample timestamps not included in the Resource
+      representation LP: 1262335
+    - [ef71dc6] cardinality of storage.models.Resource.meter attribute is one-
+      per-sample LP: 1267162
+    - [16eb199] pep8 gating fails due to tools/config/check_uptodate.sh
+      LP: 1268614
+    - [df7ff3b] ceilometer-agent-compute not working when using instances are
+      directly using volumes as backend LP: 1233103
+    - [6524bf3] mongo aggregation pipeline for resource retrieval fails with
+      excessive memory use LP: 1262571
+    - [28a2307] Can not create alarm successfully according to examples in
+      community LP: 1245362
+    - [51328a3] Add keystone_authtoken.enforce_token_bind boilerplate
+    - [9149861] Pipeline configuration is missing from doc LP: 1272988
+
+ -- James Page <james.page@ubuntu.com>  Wed, 26 Feb 2014 09:06:20 +0000
+
+ceilometer (2013.2.1-0ubuntu2) saucy-proposed; urgency=low
+
+  * Resynchronize with stable/havana (fa5c8e2) (LP: #1262788):
+    - [ec31468] change alarm_history.detail column type to Text LP: 1236861
+    - [b616562] wsme 0.5b6 is broken LP: 1240741
+    - [d90c8e1] Open stable/havana
+    - [ef6c659] Ceilometer log contains DB password in plain text LP: 1244476
+    - [7ad530b] Pin test-requirement for Nova to Havana
+    - [d554fa8] import of rabbitMQ-specific config options regardless of
+      configured RPC backend LP: 1244698
+    - [99b21df] Havan rc2 acl scenarios failing due to timezone assumption
+      LP: 1240994
+    - [c5b7462] alarm creation with sqlalchemy fails with intermittent
+      IntegrityError LP: 1255107
+    - [ae82878] [Postgresql] ERROR in ceilometer-collector log after successful
+      tempest run LP: 1237671
+    - [5cbb965] [messaging] QPID broadcast RPC requests to all servers for a
+      given topic LP: 1257293
+    - [40b833c] On restart of QPID broker, fanout no longer works LP: 1251757
+    - [fa5c8e2] Updated from global requirements
+  * debian/patches: Refreshed.
+  * debian/patches/revert-keystone-compat.patch: Revert additional
+    keystoneclient 0.4.0 compat changes that were applied to stable/havana
+    to fix upstream gate issues.
+  * debian/patches/revert-stable-havana-requirements.patch: Revert
+    version bumps to dependencies in stable/havana back to what was
+    shipped with Saucy.
+
+ -- Adam Gandelman <adamg@ubuntu.com>  Thu, 12 Dec 2013 13:29:59 -0800
+
+ceilometer (2013.2-0ubuntu1) saucy; urgency=low
+
+  * New upstream release (LP: #1236462).
+
+ -- Chuck Short <zulcss@ubuntu.com>  Thu, 17 Oct 2013 09:38:31 -0400
 
 ceilometer (2013.2~rc2-0ubuntu1) saucy; urgency=low
 
index 60ecf76812b8b25eed4ffffca71720a5b1e29115..4aae0a8c4b509d2164f446e9634103d206a53b4a 100644 (file)
@@ -1,15 +1,15 @@
 Description: Bump requirements to support sqlalchemy 0.8.2
 Author: Chuck Short <zulcss@ubuntu.com>
 Forwarded: No
-diff -Naurp ceilometer-2013.2.rc1.orig/requirements.txt ceilometer-2013.2.rc1/requirements.txt
---- ceilometer-2013.2.rc1.orig/requirements.txt        2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/requirements.txt     2013-10-02 18:10:47.357807230 -0400
-@@ -3,7 +3,7 @@ WebOb>=1.2.3,<1.3
+Index: ceilometer/requirements.txt
+--- a/requirements.txt
++++ b/requirements.txt
+@@ -3,7 +3,7 @@
  kombu>=2.4.8
  iso8601>=0.1.8
  argparse
 -SQLAlchemy>=0.7.8,<=0.7.99
 +SQLAlchemy>=0.7.8,<=0.8.99
  sqlalchemy-migrate>=0.7.2
- alembic>=0.4.1
+ alembic>=0.4.1,<0.6.4
  netaddr
diff --git a/debian/patches/revert-keystone-compat-2.patch b/debian/patches/revert-keystone-compat-2.patch
new file mode 100644 (file)
index 0000000..cbceb1c
--- /dev/null
@@ -0,0 +1,34 @@
+From: Adam Gandelman <adamg@canonical.com>
+Date: Thu, 12 Dec 2013 13:25:30 -0800
+
+This reverts commit becae1827530c0cb43cd57180f853b364ec1dcbd,
+which was applied to allow upstream gates to pass with newer
+versions of python-keystoneclient.  This causes failures on
+Ubuntu which uses a stable, older version of python-keystoneclient.
+
+---
+ tests/api/v2/test_acl_scenarios.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: ceilometer/tests/api/v2/test_acl_scenarios.py
+===================================================================
+--- ceilometer.orig/tests/api/v2/test_acl_scenarios.py 2013-12-12 13:29:17.367189074 -0800
++++ ceilometer/tests/api/v2/test_acl_scenarios.py      2013-12-12 13:29:17.359189074 -0800
+@@ -44,7 +44,7 @@
+     def get(self, key):
+         if key == "tokens/%s" % VALID_TOKEN:
+-            dt = timeutils.utcnow() + datetime.timedelta(minutes=5)
++            dt = datetime.datetime.now() + datetime.timedelta(minutes=5)
+             return json.dumps(({'access': {
+                 'token': {'id': VALID_TOKEN},
+                 'user': {
+@@ -57,7 +57,7 @@
+                     ]},
+             }}, dt.strftime("%s")))
+         if key == "tokens/%s" % VALID_TOKEN2:
+-            dt = timeutils.utcnow() + datetime.timedelta(minutes=5)
++            dt = datetime.datetime.now() + datetime.timedelta(minutes=5)
+             return json.dumps(({'access': {
+                 'token': {'id': VALID_TOKEN2},
+                 'user': {
index 409706c53f1c932e04213f53bd8c4d320b7c4ad7..a0ec1306c259b2ee4ef709c08a0d8ea2eb6cd44c 100644 (file)
@@ -3,9 +3,11 @@ Author: James Page <james.page@ubuntu.com>
 Bug: https://bugs.launchpad.net/ceilometer/+bug/1239651
 Origin: revert, https://github.com/openstack/ceilometer/commit/c0a3f3cd69eb609216a07111067478f3755cceb4
 
---- a/etc/ceilometer/ceilometer.conf.sample
-+++ b/etc/ceilometer/ceilometer.conf.sample
-@@ -742,10 +742,6 @@ connection=sqlite:////var/lib/ceilometer
+Index: ceilometer/etc/ceilometer/ceilometer.conf.sample
+===================================================================
+--- ceilometer.orig/etc/ceilometer/ceilometer.conf.sample      2013-12-12 13:11:29.243179330 -0800
++++ ceilometer/etc/ceilometer/ceilometer.conf.sample   2013-12-12 13:11:29.239179330 -0800
+@@ -742,10 +742,6 @@
  # server. (boolean value)
  #http_connect_timeout=<None>
  
@@ -16,7 +18,7 @@ Origin: revert, https://github.com/openstack/ceilometer/commit/c0a3f3cd69eb60921
  # Allows to pass in the name of a fake http_handler callback
  # function used instead of httplib.HTTPConnection or
  # httplib.HTTPSConnection. Useful for unit testing where
-@@ -778,13 +774,6 @@ connection=sqlite:////var/lib/ceilometer
+@@ -778,13 +774,6 @@
  # (string value)
  #keyfile=<None>
  
@@ -30,9 +32,11 @@ Origin: revert, https://github.com/openstack/ceilometer/commit/c0a3f3cd69eb60921
  # Directory used to cache files related to PKI tokens (string
  # value)
  #signing_dir=<None>
---- a/tests/api/v2/test_acl_scenarios.py
-+++ b/tests/api/v2/test_acl_scenarios.py
-@@ -27,7 +27,6 @@ from ceilometer import sample
+Index: ceilometer/tests/api/v2/test_acl_scenarios.py
+===================================================================
+--- ceilometer.orig/tests/api/v2/test_acl_scenarios.py 2013-12-12 13:11:29.243179330 -0800
++++ ceilometer/tests/api/v2/test_acl_scenarios.py      2013-12-12 13:11:29.239179330 -0800
+@@ -27,7 +27,6 @@
  from ceilometer.api import acl
  from ceilometer.publisher import rpc
  from ceilometer.tests import db as tests_db
@@ -40,7 +44,7 @@ Origin: revert, https://github.com/openstack/ceilometer/commit/c0a3f3cd69eb60921
  
  from .base import FunctionalTest
  
-@@ -38,8 +37,12 @@ VALID_TOKEN2 = '4562138218392832'
+@@ -38,8 +37,12 @@
  
  
  class FakeMemcache(object):
@@ -55,7 +59,7 @@ Origin: revert, https://github.com/openstack/ceilometer/commit/c0a3f3cd69eb60921
          if key == "tokens/%s" % VALID_TOKEN:
              dt = timeutils.utcnow() + datetime.timedelta(minutes=5)
              return json.dumps(({'access': {
-@@ -52,7 +55,7 @@ class FakeMemcache(object):
+@@ -52,7 +55,7 @@
                      'roles': [
                          {'name': 'admin'},
                      ]},
@@ -64,7 +68,7 @@ Origin: revert, https://github.com/openstack/ceilometer/commit/c0a3f3cd69eb60921
          if key == "tokens/%s" % VALID_TOKEN2:
              dt = timeutils.utcnow() + datetime.timedelta(minutes=5)
              return json.dumps(({'access': {
-@@ -65,11 +68,11 @@ class FakeMemcache(object):
+@@ -65,11 +68,11 @@
                      'roles': [
                          {'name': 'Member'},
                      ]},
diff --git a/debian/patches/revert-stable-havana-requirements.patch b/debian/patches/revert-stable-havana-requirements.patch
new file mode 100644 (file)
index 0000000..5e2b790
--- /dev/null
@@ -0,0 +1,30 @@
+Author: Adam Gandelman <adamg@ubuntu.com>
+Date: Wed Dec 18 10:06:25 PST 2013
+Subject: Reverts stable/havana version bumps to requirements.txt
+
+Reverts various version bumps to dependencies in stable/havana that
+were updated in global requirements to fix gating issues and synced
+across projects.
+
+Index: ceilometer/requirements.txt
+===================================================================
+--- ceilometer.orig/requirements.txt   2013-12-18 10:02:07.943272440 -0800
++++ ceilometer/requirements.txt        2013-12-18 10:05:01.251270870 -0800
+@@ -1,7 +1,7 @@
+ pbr>=0.5.21,<1.0
+ WebOb>=1.2.3,<1.3
+ kombu>=2.4.8
+-iso8601>=0.1.8
++iso8601>=0.1.4
+ argparse
+ SQLAlchemy>=0.7.8,<=0.8.99
+ sqlalchemy-migrate>=0.7.2
+@@ -21,7 +21,7 @@
+ python-swiftclient>=1.5
+ lxml>=2.3
+ requests>=1.1
+-six>=1.4.1
++six
+ WSME>=0.5b5,<0.5b6
+ PyYAML>=3.1.0
+ oslo.config>=1.2.0
index df1b4141cc20c8c3cff49c25f841f51bc0de4288..a5927fa8806c73d37902d641bf3c4845265c7f05 100644 (file)
@@ -1,4 +1,6 @@
+fix-setup-requirements.patch
 default-dbconnection-sqlite.patch
 skip-database-tests.patch
-fix-setup-requirements.patch
-#revert-keystone-compat.patch
+revert-keystone-compat.patch
+revert-keystone-compat-2.patch
+revert-stable-havana-requirements.patch
index 4d479a8e88668c24fe78dfcc31376020d3682d29..b0183787328c86e43d90c9aa26c937428bbce813 100644 (file)
@@ -1,6 +1,31 @@
-diff -Naurp ceilometer-2013.2.rc1.orig/ceilometer/tests/db.py ceilometer-2013.2.rc1/ceilometer/tests/db.py
---- ceilometer-2013.2.rc1.orig/ceilometer/tests/db.py  2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/ceilometer/tests/db.py       2013-10-02 18:00:51.237793017 -0400
+From baf40de9892278d59069d380b254c379d4f66504 Mon Sep 17 00:00:00 2001
+From: Dmitry Burmistrov <dburmistrov@mirantis.com>
+Date: Thu, 15 May 2014 22:24:43 +0400
+Subject: [PATCH] skip-database-tests
+
+---
+ ceilometer/tests/db.py                             |   11 +-
+ tests/agentbase.py                                 |   10 +-
+ tests/alarm/test_notifier.py                       |   39 +++-
+ .../test_compute_duration_by_resource_scenarios.py |    5 +-
+ tests/api/v2/test_app.py                           |   16 +-
+ tests/api/v2/test_app.py.orig                      |  220 ++++++++++++++++++++
+ tests/api/v2/test_statistics_scenarios.py          |   10 +-
+ tests/collector/dispatcher/test_db.py              |    5 +-
+ tests/collector/test_service.py                    |   24 ++-
+ tests/compute/pollsters/test_location_metadata.py  |    5 +-
+ tests/compute/test_manager.py                      |   10 +-
+ tests/storage/test_get_engine.py                   |    5 +-
+ tests/test_bin.py                                  |   38 ++--
+ tests/test_notifier.py                             |    5 +-
+ tests/test_service.py                              |   19 +-
+ 15 files changed, 362 insertions(+), 60 deletions(-)
+ create mode 100644 tests/api/v2/test_app.py.orig
+
+diff --git a/ceilometer/tests/db.py b/ceilometer/tests/db.py
+index 6a767cf..58f2539 100644
+--- a/ceilometer/tests/db.py
++++ b/ceilometer/tests/db.py
 @@ -41,8 +41,8 @@ class TestBase(test_base.TestCase):
                  message='.*you must provide a username and password.*')
              try:
@@ -23,7 +48,7 @@ diff -Naurp ceilometer-2013.2.rc1.orig/ceilometer/tests/db.py ceilometer-2013.2.
  
      def __str__(self):
          return '%(url)s_%(db)s' % dict(url=self.url, db=uuid.uuid4().hex)
-@@ -83,7 +81,4 @@ class MixinTestsWithBackendScenarios(obj
+@@ -83,7 +81,4 @@ class MixinTestsWithBackendScenarios(object):
  
      scenarios = [
          ('sqlalchemy', dict(database_connection='sqlite://')),
@@ -31,10 +56,11 @@ diff -Naurp ceilometer-2013.2.rc1.orig/ceilometer/tests/db.py ceilometer-2013.2.
 -        ('hbase', dict(database_connection='hbase://__test__')),
 -        ('db2', dict(database_connection=DB2FakeConnectionUrl())),
      ]
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/agentbase.py ceilometer-2013.2.rc1/tests/agentbase.py
---- ceilometer-2013.2.rc1.orig/tests/agentbase.py      2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/agentbase.py   2013-10-02 18:00:51.237793017 -0400
-@@ -175,7 +175,10 @@ class BaseAgentManagerTestCase(base.Test
+diff --git a/tests/agentbase.py b/tests/agentbase.py
+index 383b8e7..23d6f65 100644
+--- a/tests/agentbase.py
++++ b/tests/agentbase.py
+@@ -175,7 +175,10 @@ class BaseAgentManagerTestCase(base.TestCase):
          self.assertEqual(len(polling_tasks), 1)
          self.assertTrue(60 in polling_tasks.keys())
          self.mgr.interval_task(polling_tasks.values()[0])
@@ -46,7 +72,7 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/agentbase.py ceilometer-2013.2.rc1/
          self.assertEqual(pub.samples[0], self.Pollster.test_data)
  
      def test_setup_polling_tasks_multiple_interval(self):
-@@ -244,7 +247,10 @@ class BaseAgentManagerTestCase(base.Test
+@@ -244,7 +247,10 @@ class BaseAgentManagerTestCase(base.TestCase):
          self.assertEqual(len(polling_tasks.keys()), 1)
          polling_tasks.get(10)
          self.mgr.interval_task(polling_tasks.get(10))
@@ -58,9 +84,10 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/agentbase.py ceilometer-2013.2.rc1/
          self.assertEqual(len(pub.samples), 0)
  
      def test_agent_manager_initialize_service_hook(self):
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/alarm/test_notifier.py ceilometer-2013.2.rc1/tests/alarm/test_notifier.py
---- ceilometer-2013.2.rc1.orig/tests/alarm/test_notifier.py    2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/alarm/test_notifier.py 2013-10-02 18:00:51.237793017 -0400
+diff --git a/tests/alarm/test_notifier.py b/tests/alarm/test_notifier.py
+index 3d71b75..46ea1aa 100644
+--- a/tests/alarm/test_notifier.py
++++ b/tests/alarm/test_notifier.py
 @@ -58,7 +58,10 @@ class TestAlarmNotifier(base.TestCase):
              'reason': 'Everything is on fire',
          }
@@ -149,10 +176,11 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/alarm/test_notifier.py ceilometer-2
  
          with mock.patch('eventlet.spawn_n', self._fake_spawn_n):
              with mock.patch.object(requests, 'post') as poster:
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/api/v1/test_compute_duration_by_resource_scenarios.py ceilometer-2013.2.rc1/tests/api/v1/test_compute_duration_by_resource_scenarios.py
---- ceilometer-2013.2.rc1.orig/tests/api/v1/test_compute_duration_by_resource_scenarios.py     2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/api/v1/test_compute_duration_by_resource_scenarios.py  2013-10-02 18:00:51.237793017 -0400
-@@ -85,7 +85,10 @@ class TestComputeDurationByResource(test
+diff --git a/tests/api/v1/test_compute_duration_by_resource_scenarios.py b/tests/api/v1/test_compute_duration_by_resource_scenarios.py
+index 775b890..5a2d26a 100644
+--- a/tests/api/v1/test_compute_duration_by_resource_scenarios.py
++++ b/tests/api/v1/test_compute_duration_by_resource_scenarios.py
+@@ -85,7 +85,10 @@ class TestComputeDurationByResource(tests_api.TestBase,
          assert data['duration'] is None
  
      def _assert_times_match(self, actual, expected):
@@ -164,39 +192,271 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/api/v1/test_compute_duration_by_res
          assert actual == expected
  
      def test_overlap_range_start(self):
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/api/v2/test_app.py ceilometer-2013.2.rc1/tests/api/v2/test_app.py
---- ceilometer-2013.2.rc1.orig/tests/api/v2/test_app.py        2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/api/v2/test_app.py     2013-10-02 18:06:51.001801595 -0400
-@@ -46,7 +46,11 @@ class TestApp(base.TestCase):
+diff --git a/tests/api/v2/test_app.py b/tests/api/v2/test_app.py
+index a7c930c..c9f8329 100644
+--- a/tests/api/v2/test_app.py
++++ b/tests/api/v2/test_app.py
+@@ -49,8 +49,12 @@ class TestApp(base.TestCase):
          cfg.CONF.set_override('connection', "log://", group="database")
          cfg.CONF.set_override("auth_uri", None, group=acl.OPT_GROUP_NAME)
  
 -        api_app = app.setup_app()
+-        self.assertTrue(api_app.auth_uri.startswith('file'))
 +        try:
 +            api_app = app.setup_app()
 +        except:
 +            self.skipTest('Skipped by Ubuntu')
 +
-         self.assertTrue(api_app.auth_uri.startswith('foottp'))
++        self.assertTrue(api_app.auth_uri.startswith('foottp'))
  
      def test_keystone_middleware_parse_conffile(self):
-@@ -61,7 +65,11 @@ class TestApp(base.TestCase):
+         tmpfile = self.temp_config_file_path()
+@@ -64,8 +68,12 @@ class TestApp(base.TestCase):
          service.prepare_service(['ceilometer-api',
                                   '--config-file=%s' % tmpfile])
          cfg.CONF.set_override('connection', "log://", group="database")
 -        api_app = app.setup_app()
+-        self.assertTrue(api_app.auth_uri.startswith('file'))
 +        try:
 +            api_app = app.setup_app()
 +        except:
 +            self.skipTest6('Skipped by Ubuntu')
 +
-         self.assertTrue(api_app.auth_uri.startswith('barttp'))
++        self.assertTrue(api_app.auth_uri.startswith('barttp'))
          os.unlink(tmpfile)
  
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/api/v2/test_statistics_scenarios.py ceilometer-2013.2.rc1/tests/api/v2/test_statistics_scenarios.py
---- ceilometer-2013.2.rc1.orig/tests/api/v2/test_statistics_scenarios.py       2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/api/v2/test_statistics_scenarios.py    2013-10-02 18:00:51.241793017 -0400
-@@ -1234,15 +1234,17 @@ class TestGroupBySource(base.FunctionalT
+diff --git a/tests/api/v2/test_app.py.orig b/tests/api/v2/test_app.py.orig
+new file mode 100644
+index 0000000..e2b4a78
+--- /dev/null
++++ b/tests/api/v2/test_app.py.orig
+@@ -0,0 +1,220 @@
++# -*- encoding: utf-8 -*-
++#
++# Copyright 2013 IBM Corp.
++# Copyright © 2013 Julien Danjou
++#
++# Author: Julien Danjou <julien@danjou.info>
++#
++# Licensed under the Apache License, Version 2.0 (the "License"); you may
++# not use this file except in compliance with the License. You may obtain
++# a copy of the License at
++#
++#      http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
++# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
++# License for the specific language governing permissions and limitations
++# under the License.
++"""Test basic ceilometer-api app
++"""
++import json
++import mock
++import os
++
++from oslo.config import cfg
++import wsme
++
++from ceilometer.api import app
++from ceilometer.api import acl
++from ceilometer import service
++from ceilometer.openstack.common import gettextutils
++from ceilometer.tests import base
++from ceilometer.tests import db as tests_db
++from .base import FunctionalTest
++
++
++class TestApp(base.TestCase):
++
++    def tearDown(self):
++        super(TestApp, self).tearDown()
++        cfg.CONF.reset()
++
++    def test_keystone_middleware_conf(self):
++        cfg.CONF.set_override("auth_protocol", "foottp",
++                              group=acl.OPT_GROUP_NAME)
++        cfg.CONF.set_override("auth_version", "v2.0", group=acl.OPT_GROUP_NAME)
++        cfg.CONF.set_override("pipeline_cfg_file",
++                              self.path_get("etc/ceilometer/pipeline.yaml"))
++        cfg.CONF.set_override('connection', "log://", group="database")
++        cfg.CONF.set_override("auth_uri", None, group=acl.OPT_GROUP_NAME)
++
++        api_app = app.setup_app()
++        self.assertTrue(api_app.auth_uri.startswith('foottp'))
++
++    def test_keystone_middleware_parse_conffile(self):
++        tmpfile = self.temp_config_file_path()
++        with open(tmpfile, "w") as f:
++            f.write("[DEFAULT]\n")
++            f.write("pipeline_cfg_file = %s\n" %
++                    self.path_get("etc/ceilometer/pipeline.yaml"))
++            f.write("[%s]\n" % acl.OPT_GROUP_NAME)
++            f.write("auth_protocol = barttp\n")
++            f.write("auth_version = v2.0\n")
++        service.prepare_service(['ceilometer-api',
++                                 '--config-file=%s' % tmpfile])
++        cfg.CONF.set_override('connection', "log://", group="database")
++        api_app = app.setup_app()
++        self.assertTrue(api_app.auth_uri.startswith('barttp'))
++        os.unlink(tmpfile)
++
++
++class TestPecanApp(FunctionalTest):
++    database_connection = tests_db.MongoDBFakeConnectionUrl()
++
++    def test_pecan_extension_guessing_unset(self):
++        # check Pecan does not assume .jpg is an extension
++        response = self.app.get(self.PATH_PREFIX + '/meters/meter.jpg')
++        self.assertEqual(response.content_type, 'application/json')
++
++
++class TestApiMiddleware(FunctionalTest):
++
++    # This doesn't really matter
++    database_connection = tests_db.MongoDBFakeConnectionUrl()
++
++    no_lang_translated_error = 'No lang translated error'
++    en_US_translated_error = 'en-US translated error'
++
++    def _fake_get_localized_message(self, message, user_locale):
++        if user_locale is None:
++            return self.no_lang_translated_error
++        else:
++            return self.en_US_translated_error
++
++    def test_json_parsable_error_middleware_404(self):
++        response = self.get_json('/invalid_path',
++                                 expect_errors=True,
++                                 headers={"Accept":
++                                          "application/json"}
++                                 )
++        self.assertEqual(response.status_int, 404)
++        self.assertEqual(response.content_type, "application/json")
++        self.assertTrue(response.json['error_message'])
++        response = self.get_json('/invalid_path',
++                                 expect_errors=True,
++                                 headers={"Accept":
++                                          "application/json,application/xml"}
++                                 )
++        self.assertEqual(response.status_int, 404)
++        self.assertEqual(response.content_type, "application/json")
++        self.assertTrue(response.json['error_message'])
++        response = self.get_json('/invalid_path',
++                                 expect_errors=True,
++                                 headers={"Accept":
++                                          "application/xml;q=0.8, \
++                                          application/json"}
++                                 )
++        self.assertEqual(response.status_int, 404)
++        self.assertEqual(response.content_type, "application/json")
++        self.assertTrue(response.json['error_message'])
++        response = self.get_json('/invalid_path',
++                                 expect_errors=True
++                                 )
++        self.assertEqual(response.status_int, 404)
++        self.assertEqual(response.content_type, "application/json")
++        self.assertTrue(response.json['error_message'])
++        response = self.get_json('/invalid_path',
++                                 expect_errors=True,
++                                 headers={"Accept":
++                                          "text/html,*/*"}
++                                 )
++        self.assertEqual(response.status_int, 404)
++        self.assertEqual(response.content_type, "application/json")
++        self.assertTrue(response.json['error_message'])
++
++    def test_json_parsable_error_middleware_translation_400(self):
++        # Ensure translated messages get placed properly into json faults
++        self.stubs.Set(gettextutils, 'get_localized_message',
++                       self._fake_get_localized_message)
++        response = self.post_json('/alarms', params={},
++                                  expect_errors=True,
++                                  headers={"Accept":
++                                           "application/json"}
++                                  )
++        self.assertEqual(response.status_int, 400)
++        self.assertEqual(response.content_type, "application/json")
++        self.assertTrue(response.json['error_message'])
++        self.assertEqual(response.json['error_message']['faultstring'],
++                         self.no_lang_translated_error)
++
++    def test_xml_parsable_error_middleware_404(self):
++        response = self.get_json('/invalid_path',
++                                 expect_errors=True,
++                                 headers={"Accept":
++                                          "application/xml,*/*"}
++                                 )
++        self.assertEqual(response.status_int, 404)
++        self.assertEqual(response.content_type, "application/xml")
++        self.assertEqual(response.xml.tag, 'error_message')
++        response = self.get_json('/invalid_path',
++                                 expect_errors=True,
++                                 headers={"Accept":
++                                          "application/json;q=0.8 \
++                                          ,application/xml"}
++                                 )
++        self.assertEqual(response.status_int, 404)
++        self.assertEqual(response.content_type, "application/xml")
++        self.assertEqual(response.xml.tag, 'error_message')
++
++    def test_xml_parsable_error_middleware_translation_400(self):
++        # Ensure translated messages get placed properly into xml faults
++        self.stubs.Set(gettextutils, 'get_localized_message',
++                       self._fake_get_localized_message)
++
++        response = self.post_json('/alarms', params={},
++                                  expect_errors=True,
++                                  headers={"Accept":
++                                           "application/xml,*/*"}
++                                  )
++        self.assertEqual(response.status_int, 400)
++        self.assertEqual(response.content_type, "application/xml")
++        self.assertEqual(response.xml.tag, 'error_message')
++        fault = response.xml.findall('./error/faultstring')
++        for fault_string in fault:
++            self.assertEqual(fault_string.text, self.no_lang_translated_error)
++
++    def test_best_match_language(self):
++        # Ensure that we are actually invoking language negotiation
++        self.stubs.Set(gettextutils, 'get_localized_message',
++                       self._fake_get_localized_message)
++
++        response = self.post_json('/alarms', params={},
++                                  expect_errors=True,
++                                  headers={"Accept":
++                                           "application/xml,*/*",
++                                           "Accept-Language":
++                                           "en-US"}
++                                  )
++        self.assertEqual(response.status_int, 400)
++        self.assertEqual(response.content_type, "application/xml")
++        self.assertEqual(response.xml.tag, 'error_message')
++        fault = response.xml.findall('./error/faultstring')
++        for fault_string in fault:
++            self.assertEqual(fault_string.text, self.en_US_translated_error)
++
++    def test_translated_then_untranslated_error(self):
++        resp = self.get_json('/alarms/alarm-id-3', expect_errors=True)
++        self.assertEqual(resp.status_code, 404)
++        self.assertEqual(json.loads(resp.body)['error_message']
++                         ['faultstring'], "Alarm alarm-id-3 Not Found")
++
++        cls = 'ceilometer.api.controllers.v2.EntityNotFound'
++        with mock.patch(cls) as CustomErrorClass:
++            CustomErrorClass.return_value = wsme.exc.ClientSideError(
++                "untranslated_error")
++            resp = self.get_json('/alarms/alarm-id-5', expect_errors=True)
++
++        self.assertEqual(resp.status_code, 400)
++        self.assertEqual(json.loads(resp.body)['error_message']
++                         ['faultstring'], "untranslated_error")
+diff --git a/tests/api/v2/test_statistics_scenarios.py b/tests/api/v2/test_statistics_scenarios.py
+index 38da05f..aeb93bc 100644
+--- a/tests/api/v2/test_statistics_scenarios.py
++++ b/tests/api/v2/test_statistics_scenarios.py
+@@ -1234,15 +1234,17 @@ class TestGroupBySource(base.FunctionalTest,
      # tests.
  
      scenarios = [
@@ -218,10 +478,11 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/api/v2/test_statistics_scenarios.py
          super(TestGroupBySource, self).setUp()
  
          test_sample_data = (
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/collector/dispatcher/test_db.py ceilometer-2013.2.rc1/tests/collector/dispatcher/test_db.py
---- ceilometer-2013.2.rc1.orig/tests/collector/dispatcher/test_db.py   2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/collector/dispatcher/test_db.py        2013-10-02 18:00:51.241793017 -0400
-@@ -30,7 +30,10 @@ class TestDispatcherDB(tests_base.TestCa
+diff --git a/tests/collector/dispatcher/test_db.py b/tests/collector/dispatcher/test_db.py
+index a538a5d..7ca68ed 100644
+--- a/tests/collector/dispatcher/test_db.py
++++ b/tests/collector/dispatcher/test_db.py
+@@ -30,7 +30,10 @@ class TestDispatcherDB(tests_base.TestCase):
  
      def setUp(self):
          super(TestDispatcherDB, self).setUp()
@@ -233,10 +494,11 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/collector/dispatcher/test_db.py cei
          self.ctx = None
  
      def test_valid_message(self):
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/collector/test_service.py ceilometer-2013.2.rc1/tests/collector/test_service.py
---- ceilometer-2013.2.rc1.orig/tests/collector/test_service.py 2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/collector/test_service.py      2013-10-02 18:00:51.241793017 -0400
-@@ -114,7 +114,10 @@ class TestUDPCollectorService(TestCollec
+diff --git a/tests/collector/test_service.py b/tests/collector/test_service.py
+index b94d13b..e292e8e 100644
+--- a/tests/collector/test_service.py
++++ b/tests/collector/test_service.py
+@@ -114,7 +114,10 @@ class TestUDPCollectorService(TestCollector):
  
      def setUp(self):
          super(TestUDPCollectorService, self).setUp()
@@ -248,7 +510,7 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/collector/test_service.py ceilomete
          self.counter = sample.Sample(
              name='foobar',
              type='bad',
-@@ -189,7 +192,10 @@ class TestCollectorService(TestCollector
+@@ -189,7 +192,10 @@ class TestCollectorService(TestCollector):
  
      def setUp(self):
          super(TestCollectorService, self).setUp()
@@ -260,7 +522,7 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/collector/test_service.py ceilomete
          self.ctx = None
  
      @patch('ceilometer.pipeline.setup_pipeline', MagicMock())
-@@ -197,8 +203,11 @@ class TestCollectorService(TestCollector
+@@ -197,8 +203,11 @@ class TestCollectorService(TestCollector):
          # If we try to create a real RPC connection, init_host() never
          # returns. Mock it out so we can establish the service
          # configuration.
@@ -274,7 +536,7 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/collector/test_service.py ceilomete
  
      @patch('ceilometer.pipeline.setup_pipeline', MagicMock())
      def test_process_notification(self):
-@@ -206,8 +215,11 @@ class TestCollectorService(TestCollector
+@@ -206,8 +215,11 @@ class TestCollectorService(TestCollector):
          # returns. Mock it out so we can establish the service
          # configuration.
          cfg.CONF.set_override("store_events", False, group="collector")
@@ -288,10 +550,11 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/collector/test_service.py ceilomete
          self.srv.pipeline_manager.pipelines[0] = MagicMock()
          self.srv.notification_manager = test_manager.TestExtensionManager(
              [extension.Extension('test',
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/compute/pollsters/test_location_metadata.py ceilometer-2013.2.rc1/tests/compute/pollsters/test_location_metadata.py
---- ceilometer-2013.2.rc1.orig/tests/compute/pollsters/test_location_metadata.py       2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/compute/pollsters/test_location_metadata.py    2013-10-02 18:00:51.241793017 -0400
-@@ -47,7 +47,10 @@ class TestLocationMetadata(test_base.Tes
+diff --git a/tests/compute/pollsters/test_location_metadata.py b/tests/compute/pollsters/test_location_metadata.py
+index a14ddfc..60619b5 100644
+--- a/tests/compute/pollsters/test_location_metadata.py
++++ b/tests/compute/pollsters/test_location_metadata.py
+@@ -47,7 +47,10 @@ class TestLocationMetadata(test_base.TestCase):
  
      @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock())
      def setUp(self):
@@ -303,9 +566,10 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/compute/pollsters/test_location_met
          super(TestLocationMetadata, self).setUp()
  
          # Mimics an instance returned from nova api call
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/compute/test_manager.py ceilometer-2013.2.rc1/tests/compute/test_manager.py
---- ceilometer-2013.2.rc1.orig/tests/compute/test_manager.py   2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/compute/test_manager.py        2013-10-02 18:00:51.241793017 -0400
+diff --git a/tests/compute/test_manager.py b/tests/compute/test_manager.py
+index b3f3b3d..8e28a50 100644
+--- a/tests/compute/test_manager.py
++++ b/tests/compute/test_manager.py
 @@ -29,7 +29,10 @@ class TestManager(base.TestCase):
  
      @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock())
@@ -318,7 +582,7 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/compute/test_manager.py ceilometer-
          self.assertIsNotNone(list(mgr.pollster_manager))
  
  
-@@ -45,7 +48,10 @@ class TestRunTasks(agentbase.BaseAgentMa
+@@ -45,7 +48,10 @@ class TestRunTasks(agentbase.BaseAgentManagerTestCase):
          raise Exception
  
      def setup_manager(self):
@@ -330,9 +594,10 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/compute/test_manager.py ceilometer-
  
      @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock())
      def setUp(self):
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/storage/test_get_engine.py ceilometer-2013.2.rc1/tests/storage/test_get_engine.py
---- ceilometer-2013.2.rc1.orig/tests/storage/test_get_engine.py        2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/storage/test_get_engine.py     2013-10-02 18:00:51.241793017 -0400
+diff --git a/tests/storage/test_get_engine.py b/tests/storage/test_get_engine.py
+index 498b6f4..4824461 100644
+--- a/tests/storage/test_get_engine.py
++++ b/tests/storage/test_get_engine.py
 @@ -31,7 +31,10 @@ class EngineTest(testtools.TestCase):
          conf = mox.Mox().CreateMockAnything()
          conf.database = mox.Mox().CreateMockAnything()
@@ -345,9 +610,10 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/storage/test_get_engine.py ceilomet
          self.assertIsInstance(engine, impl_log.LogStorage)
  
      def test_get_engine_no_such_engine(self):
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/test_bin.py ceilometer-2013.2.rc1/tests/test_bin.py
---- ceilometer-2013.2.rc1.orig/tests/test_bin.py       2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/test_bin.py    2013-10-02 18:00:51.241793017 -0400
+diff --git a/tests/test_bin.py b/tests/test_bin.py
+index a358b57..bc2cd2a 100644
+--- a/tests/test_bin.py
++++ b/tests/test_bin.py
 @@ -36,14 +36,20 @@ class BinTestCase(base.TestCase):
              tmp.write("connection=log://localhost\n")
  
@@ -375,7 +641,7 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/test_bin.py ceilometer-2013.2.rc1/t
  
  
  class BinSendCounterTestCase(base.TestCase):
-@@ -59,11 +65,14 @@ class BinSendCounterTestCase(base.TestCa
+@@ -59,11 +65,14 @@ class BinSendCounterTestCase(base.TestCase):
                  "pipeline_cfg_file=%s\n" % pipeline_cfg_file)
  
      def test_send_counter_run(self):
@@ -409,9 +675,10 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/test_bin.py ceilometer-2013.2.rc1/t
  
      def tearDown(self):
          super(BinApiTestCase, self).tearDown()
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/test_notifier.py ceilometer-2013.2.rc1/tests/test_notifier.py
---- ceilometer-2013.2.rc1.orig/tests/test_notifier.py  2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/test_notifier.py       2013-10-02 18:00:51.241793017 -0400
+diff --git a/tests/test_notifier.py b/tests/test_notifier.py
+index 814dca1..9a659fb 100644
+--- a/tests/test_notifier.py
++++ b/tests/test_notifier.py
 @@ -80,7 +80,10 @@ class TestNotifier(tests_base.TestCase):
              }],
              transformer_manager)
@@ -424,9 +691,10 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/test_notifier.py ceilometer-2013.2.
          self.assertEqual(len(pub.samples), 0)
          notifier.notify(None, MESSAGE)
          self.assertTrue(len(pub.samples) > 0)
-diff -Naurp ceilometer-2013.2.rc1.orig/tests/test_service.py ceilometer-2013.2.rc1/tests/test_service.py
---- ceilometer-2013.2.rc1.orig/tests/test_service.py   2013-10-02 15:17:37.000000000 -0400
-+++ ceilometer-2013.2.rc1/tests/test_service.py        2013-10-02 18:00:51.241793017 -0400
+diff --git a/tests/test_service.py b/tests/test_service.py
+index 5245c3d..f757dd1 100644
+--- a/tests/test_service.py
++++ b/tests/test_service.py
 @@ -98,8 +98,8 @@ class ServiceRestartTest(base.TestCase):
  
      def tearDown(self):
@@ -466,3 +734,6 @@ diff -Naurp ceilometer-2013.2.rc1.orig/tests/test_service.py ceilometer-2013.2.r
 +            self._service_restart('ceilometer-agent-central')
 +        except:
 +            self.skipTest('Skipped by Ubuntu')
+-- 
+1.7.9.5
+
index 0a698eaf4bc8e2f8894b59d0cf87c1209ab37ba7..20e7dbd09cc3b4c190df5a2c044625d092f3bceb 100644 (file)
@@ -1,4 +1,4 @@
-From 4e1c90bcccaa5bfd78a8bd3fd1bef1c578fe586a Mon Sep 17 00:00:00 2001
+From ba3bb18de4719a769b809921dcb87e0e9f441808 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?P=C3=A1draig=20Brady?= <pbrady@redhat.com>
 Date: Fri, 6 Jan 2012 12:16:34 +0000
 Subject: [PATCH] Ensure we don't access the net when building docs
@@ -7,8 +7,8 @@ Subject: [PATCH] Ensure we don't access the net when building docs
 
 Change-Id: I9d02fb4053a8106672aded1614a2850e21603eb2
 ---
- doc/source/conf.py |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
+ doc/source/conf.py | 2 --
+ 1 file changed, 2 deletions(-)
 
 diff --git a/doc/source/conf.py b/doc/source/conf.py
 index 98646df..c561497 100644
index 7998873bf8cf53a5ee2ddcc048ab48a8a66f8dce..5fab7ec5f59c9baa99dcb4e61cdfb5f857aa197e 100644 (file)
@@ -3,7 +3,7 @@
 %global pypi_name ceilometer
 
 Name:             openstack-ceilometer
-Version:          2013.2
+Version:          2013.2.3
 Release:          1%{?dist}
 Summary:          OpenStack measurement collection service
 
@@ -28,7 +28,7 @@ Source15:         %{name}-alarm-evaluator.init
 Source150:        %{name}-alarm-evaluator.upstart
 
 #
-# patches_base=2013.2
+# patches_base=2013.2.3
 #
 Patch0001: 0001-Ensure-we-don-t-access-the-net-when-building-docs.patch
 
@@ -47,7 +47,7 @@ BuildRequires:    openstack-utils
 
 # These are required to build due to the requirements check added
 BuildRequires:    python-sqlalchemy0.7
-BuildRequires:    python-webob  >= 1.2
+BuildRequires:    python-webob1.2
 
 
 %description
@@ -63,6 +63,7 @@ Requires:         python-qpid
 Requires:         python-kombu
 Requires:         python-amqplib
 
+Requires:         python-babel
 Requires:         python-eventlet
 Requires:         python-greenlet
 Requires:         python-iso8601
@@ -496,6 +497,18 @@ fi
 
 
 %changelog
+* Thu Apr 10 2014 Pádraig Brady <pbrady@redhat.com> - 2013.2.3-1
+- Update to Havana stable release 2013.2.3
+
+* Fri Feb 14 2014 Matthias Runge <mrunge@redhat.com> - 2014.2.2-1
+- Update to havana stable release 2013.2.2
+
+* Tue Feb 04 2014 Pádraig Brady <pbrady@redhat.com> - 2013.2.1-2
+- Fix missing dependency on python-babel
+
+* Tue Dec 17 2013 Pádraig Brady <pbrady@redhat.com> - 2013.2.1-1
+- Update to Havana stable release 2013.2.1
+
 * Thu Oct 17 2013 Pádraig Brady <pbrady@redhat.com> - 2013.2-1
 - Update to Havana release