text: #
  #    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.
  
  from oslo_config import cfg
  
  from heat.db.sqlalchemy import models
  from heat.objects import resource_properties_data as rpd_object
  from heat.tests import common
  from heat.tests import utils
  
  
  class ResourcePropertiesDataTest(common.HeatTestCase):
      def setUp(self):
          super(ResourcePropertiesDataTest, self).setUp()
          self.ctx = utils.dummy_context()
  
      data = {'prop1': 'string',
              'prop2': {'a': 'dict'},
              'prop3': 1,
              'prop4': ['a', 'list'],
              'prop5': True}
  
      def _get_rpd_and_db_obj(self):
          rpd_obj = rpd_object.ResourcePropertiesData().create_or_update(
              self.ctx, self.data)
          db_obj = self.ctx.session.query(
              models.ResourcePropertiesData).get(rpd_obj.id)
          self.assertEqual(len(self.data), len(db_obj['data']))
          return rpd_obj, db_obj
  
      def test_rsrc_prop_data_encrypt(self):
          cfg.CONF.set_override('encrypt_parameters_and_properties', True)
          rpd_obj, db_obj = self._get_rpd_and_db_obj()
  
          # verify data is encrypted in the db
          self.assertNotEqual(db_obj['data'], self.data)
          for key in self.data:
              self.assertEqual('cryptography_decrypt_v1',
                               db_obj['data'][key][0])
  
          # verify rpd_obj data is unencrypted
          self.assertEqual(self.data, rpd_obj['data'])
  
          # verify loading a fresh rpd_obj has decrypted data
          rpd_obj = rpd_object.ResourcePropertiesData._from_db_object(
              rpd_object.ResourcePropertiesData(self.ctx),
              self.ctx, db_obj)
          self.assertEqual(self.data, rpd_obj['data'])
  
      def test_rsrc_prop_data_no_encrypt(self):
          cfg.CONF.set_override('encrypt_parameters_and_properties', False)
          rpd_obj, db_obj = self._get_rpd_and_db_obj()
  
          # verify data is unencrypted in the db
          self.assertEqual(db_obj['data'], self.data)
  