diff --git a/functional/test_heat_autoscaling.py b/functional/test_heat_autoscaling.py
index e87badb..357612c 100644
--- a/functional/test_heat_autoscaling.py
+++ b/functional/test_heat_autoscaling.py
@@ -10,6 +10,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from heat_integrationtests.common import test
 from heat_integrationtests.functional import functional_base
 
 
@@ -21,20 +22,38 @@
   random_group:
     type: OS::Heat::AutoScalingGroup
     properties:
-      max_size: 10
-      min_size: 10
+      cooldown: 0
+      desired_capacity: 3
+      max_size: 5
+      min_size: 2
       resource:
         type: OS::Heat::RandomString
 
+  scale_up_policy:
+    type: OS::Heat::ScalingPolicy
+    properties:
+      adjustment_type: change_in_capacity
+      auto_scaling_group_id: { get_resource: random_group }
+      scaling_adjustment: 1
+
+  scale_down_policy:
+    type: OS::Heat::ScalingPolicy
+    properties:
+      adjustment_type: change_in_capacity
+      auto_scaling_group_id: { get_resource: random_group }
+      scaling_adjustment: -1
+
 outputs:
   all_values:
     value: {get_attr: [random_group, outputs_list, value]}
   value_0:
     value: {get_attr: [random_group, resource.0.value]}
-  value_5:
-    value: {get_attr: [random_group, resource.5.value]}
-  value_9:
-    value: {get_attr: [random_group, resource.9.value]}
+  value_1:
+    value: {get_attr: [random_group, resource.1.value]}
+  value_2:
+    value: {get_attr: [random_group, resource.2.value]}
+  asg_size:
+    value: {get_attr: [random_group, current_size]}
 '''
 
     template_nested = '''
@@ -44,8 +63,9 @@
   random_group:
     type: OS::Heat::AutoScalingGroup
     properties:
-      max_size: 10
-      min_size: 10
+      desired_capacity: 3
+      max_size: 5
+      min_size: 2
       resource:
         type: randomstr.yaml
 
@@ -54,10 +74,10 @@
     value: {get_attr: [random_group, outputs_list, random_str]}
   value_0:
     value: {get_attr: [random_group, resource.0.random_str]}
-  value_5:
-    value: {get_attr: [random_group, resource.5.random_str]}
-  value_9:
-    value: {get_attr: [random_group, resource.9.random_str]}
+  value_1:
+    value: {get_attr: [random_group, resource.1.random_str]}
+  value_2:
+    value: {get_attr: [random_group, resource.2.random_str]}
 '''
 
     template_randomstr = '''
@@ -78,14 +98,54 @@
     def _assert_output_values(self, stack_id):
         stack = self.client.stacks.get(stack_id)
         all_values = self._stack_output(stack, 'all_values')
-        self.assertEqual(10, len(all_values))
+        self.assertEqual(3, len(all_values))
         self.assertEqual(all_values[0], self._stack_output(stack, 'value_0'))
-        self.assertEqual(all_values[5], self._stack_output(stack, 'value_5'))
-        self.assertEqual(all_values[9], self._stack_output(stack, 'value_9'))
+        self.assertEqual(all_values[1], self._stack_output(stack, 'value_1'))
+        self.assertEqual(all_values[2], self._stack_output(stack, 'value_2'))
+
+    def test_asg_scale_up_max_size(self):
+        stack_id = self.stack_create(template=self.template,
+                                     expected_status='CREATE_COMPLETE')
+        stack = self.client.stacks.get(stack_id)
+        asg_size = self._stack_output(stack, 'asg_size')
+        # Ensure that initial desired capacity is met
+        self.assertEqual(3, asg_size)
+
+        # send scale up signals and ensure that asg honors max_size
+        asg = self.client.resources.get(stack_id, 'random_group')
+        max_size = 5
+        for num in range(asg_size+1, max_size+2):
+            expected_resources = num if num <= max_size else max_size
+            self.client.resources.signal(stack_id, 'scale_up_policy')
+            test.call_until_true(self.conf.build_timeout,
+                                 self.conf.build_interval,
+                                 self.check_autoscale_complete,
+                                 asg.physical_resource_id, expected_resources)
+
+    def test_asg_scale_down_min_size(self):
+        stack_id = self.stack_create(template=self.template,
+                                     expected_status='CREATE_COMPLETE')
+        stack = self.client.stacks.get(stack_id)
+        asg_size = self._stack_output(stack, 'asg_size')
+        # Ensure that initial desired capacity is met
+        self.assertEqual(3, asg_size)
+
+        # send scale down signals and ensure that asg honors min_size
+        asg = self.client.resources.get(stack_id, 'random_group')
+        min_size = 2
+        for num in range(asg_size-1, 0, -1):
+            expected_resources = num if num >= min_size else min_size
+            self.client.resources.signal(stack_id, 'scale_down_policy')
+            test.call_until_true(self.conf.build_timeout,
+                                 self.conf.build_interval,
+                                 self.check_autoscale_complete,
+                                 asg.physical_resource_id, expected_resources)
 
     def test_path_attrs(self):
         stack_id = self.stack_create(template=self.template)
-        expected_resources = {'random_group': 'OS::Heat::AutoScalingGroup'}
+        expected_resources = {'random_group': 'OS::Heat::AutoScalingGroup',
+                              'scale_up_policy': 'OS::Heat::ScalingPolicy',
+                              'scale_down_policy': 'OS::Heat::ScalingPolicy'}
         self.assertEqual(expected_resources, self.list_resources(stack_id))
         self._assert_output_values(stack_id)
 
