I mocked AWS-Batch using moto, and I was able to register the job, so I will leave it as a memorandum.
test_aws_batch.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
import boto3
from moto import mock_batch, mock_iam
class MyTestCase(unittest.TestCase):
@mock_iam
@mock_batch
def test_aws_batch(self):
client = boto3.client('batch')
iam = boto3.client('iam')
#mock iam role
iams = iam.create_role(
RoleName='test_matsu_iam',
AssumeRolePolicyDocument='string',
)
iam_arn = iams.get('Role').get('Arn')
print("iamRoleArn: " + iam_arn)
# aws-batch computing environment mock
batch = client.create_compute_environment(
computeEnvironmentName='test_matsu_batch',
type='UNMANAGED',
serviceRole=iam_arn
)
compute_environment_arn = batch.get('computeEnvironmentArn')
print("computeEnvironmentArn: " + compute_environment_arn)
# aws-batch job queue mock
job_qs = client.create_job_queue(
jobQueueName='test_matsu_job_q',
state='ENABLED',
priority=1,
computeEnvironmentOrder=[
{
'order': 1,
'computeEnvironment': compute_environment_arn
},
]
)
job_q_arn = job_qs.get('jobQueueArn')
print("jobQueueArn: " + job_q_arn)
# aws-batch job definition mock
job_definition = client.register_job_definition(
jobDefinitionName='test_matsu_job_definition',
type='container',
containerProperties={
'image': 'string',
'vcpus': 123,
'memory': 123
},
)
job_definition_arn = job_definition.get('jobDefinitionArn')
print("jobDefinitionArn: " + job_definition_arn)
#Add job
client.submit_job(
jobName='string',
jobQueue=job_q_arn,
jobDefinition=job_definition_arn
)
#Get job list
jobs = client.list_jobs(
jobQueue=job_q_arn
)
#Output job list
print("jobSummaryList: " + str(jobs.get('jobSummaryList')))
if __name__ == '__main__':
unittest.main()
$ python -m unittest test.test_aws_batch -v
test_aws_batch (test.test_aws_batch.MyTestCase) ... iamRoleArn: arn:aws:iam::123456789012:role/test_matsu_iam
computeEnvironmentArn: arn:aws:batch:ap-northeast-1:123456789012:compute-environment/test_matsu_batch
jobQueueArn: arn:aws:batch:ap-northeast-1:123456789012:job-queue/test_matsu_job_q
jobDefinitionArn: arn:aws:batch:ap-northeast-1:123456789012:job-definition/test_matsu_job_definition:1
jobSummaryList: [{'jobId': 'ee3a3206-fdfe-404f-a1c1-9c444b41b546', 'jobName': 'string'}]
ok
----------------------------------------------------------------------
Ran 1 test in 0.167s
OK
Various resources were mocked and the job was successfully submitted.
With this mock, it is possible to test submitting jobs to AWS-Batch without using actual AWS resources.
Unfortunately, the content of the submitted job is only jobId and jobName.
It is unlikely to be available for tests related to job creation time or status.
The conclusion is that it seems better to use mock of ʻunit test` for tests that use the submitted jobs.
Recommended Posts