def test_normalize_results_and_check_for_failures()

in aws/hhvm1/lambdas/test.py [0:0]


  def test_normalize_results_and_check_for_failures(self):
    v1 = '3.30.12'
    v1_before = {
      'version': v1,
      'results': {
        'MakeSourceTarball': {'skip': True},
        'ForEachPlatform': [
          {
            'platform': 'debian-8-jessie',
            'results': {
              'MakeBinaryPackage': {'success': {'ec2': 'i-faceb001'}},
            },
          },
          {
            'results': {
              'MakeBinaryPackage': {'skip': True},
            },
            'platform': 'ubuntu-14.04-trusty',
          },
        ],
        'PublishSourceTarballAndPublishDockerImages': [
          {
            'results': {
              'PublishSourceTarball': {
                'skip': False,
                'taskInput': {
                  'name': 'PublishSourceTarball-3.30.12',
                  'env': 'VERSION="3.30.12"\nIS_NIGHTLY="false"',
                },
                'success': {'ec2': 'i-faceb002'},
              },
            },
          },
          {
            'results': {
              'PublishDockerImages': {'success': {'ec2': 'i-faceb003'}},
            },
          },
        ],
      },
    }
    v1_after = {
      'MakeSourceTarball': {'skip': True},
      'ForEachPlatform': {
        'debian-8-jessie': {
          'MakeBinaryPackage': {'success': {'ec2': 'i-faceb001'}},
        },
        'ubuntu-14.04-trusty': {
          'MakeBinaryPackage': {'skip': True},
        },
      },
      'PublishSourceTarball': {'success': {'ec2': 'i-faceb002'}},
      'PublishDockerImages': {'success': {'ec2': 'i-faceb003'}},
    }
    v2 = '4.42.0'
    v2_before = {
      'version': v2,
      'results': {'foo': {'skip': True}},
    }
    v2_after = {
      'foo': {'skip': True},
    }
    parallel_steps_before = [
      {
        'results': {
          'UpdateIndices': {'success': {'ec2': 'i-faceb004'}},
        },
      },
      {
        'results': {
          'InvalidateCloudFront': {'success': {'ec2': 'i-faceb005'}},
        },
      },
    ]
    everything_after = {
      'ForEachVersion': {
        v1: v1_after,
        v2: v2_after,
      },
      'UpdateIndices': {'success': {'ec2': 'i-faceb004'}},
      'InvalidateCloudFront': {'success': {'ec2': 'i-faceb005'}},
    }
    # normalization inside ForEachVersion
    self.assertEqual(normalize_results.lambda_handler(v1_before), v1_after)
    self.assertEqual(normalize_results.lambda_handler(v2_before), v2_after)
    # final normalization after ForEachVersion
    self.assertEqual(
      check_for_failures.lambda_handler(normalize_results.lambda_handler({
        'buildInput': {},
        'results': {
          'ForEachVersion': [
            {
              'version': v1,
              'results': v1_after,
            },
            {
              'version': v2,
              'results': v2_after,
            },
          ],
          'UpdateIndicesAndInvalidateCloudFront': parallel_steps_before,
        },
      })),
      everything_after
    )
    # normalization of everything at once (not used right now but was used in
    # the past and we may need it again at some point)
    self.assertEqual(
      check_for_failures.lambda_handler(normalize_results.lambda_handler({
        'buildInput': {},
        'results': {
          'ForEachVersion': [
            v1_before,
            v2_before,
          ],
          'UpdateIndicesAndInvalidateCloudFront': parallel_steps_before,
        },
      })),
      everything_after
    )

    with self.assertRaisesRegex(
      Exception,
      '^The following steps have failed:\nfoo bar$'
    ):
      check_for_failures.lambda_handler(normalize_results.lambda_handler(
        {'results': {'foo': {'failure': {'Cause': 'bar'}}}}
      ))

    with self.assertRaisesRegex(
      Exception,
      '^The following steps have failed:\n'
      'MakeSourceTarball 4.2.0 \n'
      'PublishBinaryPackage 4.2.0 debian \n'
      'MakeBinaryPackage 4.2.1 ubuntu \n'
      'PublishBinaryPackage 4.2.1 ubuntu \n'
      'PublishBinaryPackage 4.2.1 debian \n'
      'bar $'
    ):
      check_for_failures.lambda_handler(normalize_results.lambda_handler({
        'results': {
          'foo': {'success': {}},
          'ForEachVersion': [
            {
              'version': '4.2.0',
              'results': {
                'MakeSourceTarball': {'failure': {}},
                'ForEachPlatform': [
                  {
                    'platform': 'ubuntu',
                    'results': {'PublishBinaryPackage': {'success': {}}}
                  },
                  {
                    'platform': 'debian',
                    'results': {'PublishBinaryPackage': {'failure': {}}},
                  },
                ],
              },
            },
            {
              'version': '4.2.1',
              'results': {
                'MakeSourceTarball': {'success': {}},
                'ForEachPlatform': [
                  {
                    'platform': 'ubuntu',
                    'results': {
                      'MakeBinaryPackage': {'failure': {}},
                      'PublishBinaryPackage': {'failure': {}},
                    }
                  },
                  {
                    'platform': 'debian',
                    'results': {
                      'MakeBinaryPackage': {'success': {}},
                      'PublishBinaryPackage': {'failure': {}},
                    },
                  },
                ],
              },
            },
          ],
          'bar': {'failure': {}},
        },
      }))