347 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			347 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import boto3
							 | 
						||
| 
								 | 
							
								import json
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from moto import mock_iot
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_iot
							 | 
						||
| 
								 | 
							
								def test_create_job():
							 | 
						||
| 
								 | 
							
								    client = boto3.client("iot", region_name="eu-west-1")
							 | 
						||
| 
								 | 
							
								    name = "my-thing"
							 | 
						||
| 
								 | 
							
								    job_id = "TestJob"
							 | 
						||
| 
								 | 
							
								    # thing# job document
							 | 
						||
| 
								 | 
							
								    #     job_document = {
							 | 
						||
| 
								 | 
							
								    #         "field": "value"
							 | 
						||
| 
								 | 
							
								    #     }
							 | 
						||
| 
								 | 
							
								    thing = client.create_thing(thingName=name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingName").which.should.equal(name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # job document
							 | 
						||
| 
								 | 
							
								    job_document = {"field": "value"}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id,
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        document=json.dumps(job_document),
							 | 
						||
| 
								 | 
							
								        description="Description",
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("description")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_iot
							 | 
						||
| 
								 | 
							
								def test_list_jobs():
							 | 
						||
| 
								 | 
							
								    client = boto3.client("iot", region_name="eu-west-1")
							 | 
						||
| 
								 | 
							
								    name = "my-thing"
							 | 
						||
| 
								 | 
							
								    job_id = "TestJob"
							 | 
						||
| 
								 | 
							
								    # thing# job document
							 | 
						||
| 
								 | 
							
								    #     job_document = {
							 | 
						||
| 
								 | 
							
								    #         "field": "value"
							 | 
						||
| 
								 | 
							
								    #     }
							 | 
						||
| 
								 | 
							
								    thing = client.create_thing(thingName=name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingName").which.should.equal(name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # job document
							 | 
						||
| 
								 | 
							
								    job_document = {"field": "value"}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job1 = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id,
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        document=json.dumps(job_document),
							 | 
						||
| 
								 | 
							
								        description="Description",
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job1.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job1.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								    job1.should.have.key("description")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job2 = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id + "1",
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        document=json.dumps(job_document),
							 | 
						||
| 
								 | 
							
								        description="Description",
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job2.should.have.key("jobId").which.should.equal(job_id + "1")
							 | 
						||
| 
								 | 
							
								    job2.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								    job2.should.have.key("description")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    jobs = client.list_jobs()
							 | 
						||
| 
								 | 
							
								    jobs.should.have.key("jobs")
							 | 
						||
| 
								 | 
							
								    jobs.should_not.have.key("nextToken")
							 | 
						||
| 
								 | 
							
								    jobs["jobs"][0].should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    jobs["jobs"][1].should.have.key("jobId").which.should.equal(job_id + "1")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_iot
							 | 
						||
| 
								 | 
							
								def test_describe_job():
							 | 
						||
| 
								 | 
							
								    client = boto3.client("iot", region_name="eu-west-1")
							 | 
						||
| 
								 | 
							
								    name = "my-thing"
							 | 
						||
| 
								 | 
							
								    job_id = "TestJob"
							 | 
						||
| 
								 | 
							
								    # thing
							 | 
						||
| 
								 | 
							
								    thing = client.create_thing(thingName=name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingName").which.should.equal(name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id,
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        documentSource="https://s3-eu-west-1.amazonaws.com/bucket-name/job_document.json",
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.describe_job(jobId=job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("documentSource")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("targets")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobProcessDetails")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("lastUpdatedAt")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("createdAt")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobExecutionsRolloutConfig")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "targetSelection"
							 | 
						||
| 
								 | 
							
								    ).which.should.equal("CONTINUOUS")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("presignedUrlConfig")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "presignedUrlConfig"
							 | 
						||
| 
								 | 
							
								    ).which.should.have.key("roleArn").which.should.equal(
							 | 
						||
| 
								 | 
							
								        "arn:aws:iam::1:role/service-role/iot_job_role"
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "presignedUrlConfig"
							 | 
						||
| 
								 | 
							
								    ).which.should.have.key("expiresInSec").which.should.equal(123)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "jobExecutionsRolloutConfig"
							 | 
						||
| 
								 | 
							
								    ).which.should.have.key("maximumPerMinute").which.should.equal(10)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_iot
							 | 
						||
| 
								 | 
							
								def test_describe_job_1():
							 | 
						||
| 
								 | 
							
								    client = boto3.client("iot", region_name="eu-west-1")
							 | 
						||
| 
								 | 
							
								    name = "my-thing"
							 | 
						||
| 
								 | 
							
								    job_id = "TestJob"
							 | 
						||
| 
								 | 
							
								    # thing
							 | 
						||
| 
								 | 
							
								    thing = client.create_thing(thingName=name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingName").which.should.equal(name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # job document
							 | 
						||
| 
								 | 
							
								    job_document = {"field": "value"}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id,
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        document=json.dumps(job_document),
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.describe_job(jobId=job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("targets")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobProcessDetails")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("lastUpdatedAt")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("createdAt")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobExecutionsRolloutConfig")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "targetSelection"
							 | 
						||
| 
								 | 
							
								    ).which.should.equal("CONTINUOUS")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("presignedUrlConfig")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "presignedUrlConfig"
							 | 
						||
| 
								 | 
							
								    ).which.should.have.key("roleArn").which.should.equal(
							 | 
						||
| 
								 | 
							
								        "arn:aws:iam::1:role/service-role/iot_job_role"
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "presignedUrlConfig"
							 | 
						||
| 
								 | 
							
								    ).which.should.have.key("expiresInSec").which.should.equal(123)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "jobExecutionsRolloutConfig"
							 | 
						||
| 
								 | 
							
								    ).which.should.have.key("maximumPerMinute").which.should.equal(10)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_iot
							 | 
						||
| 
								 | 
							
								def test_delete_job():
							 | 
						||
| 
								 | 
							
								    client = boto3.client("iot", region_name="eu-west-1")
							 | 
						||
| 
								 | 
							
								    name = "my-thing"
							 | 
						||
| 
								 | 
							
								    job_id = "TestJob"
							 | 
						||
| 
								 | 
							
								    # thing
							 | 
						||
| 
								 | 
							
								    thing = client.create_thing(thingName=name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingName").which.should.equal(name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id,
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        documentSource="https://s3-eu-west-1.amazonaws.com/bucket-name/job_document.json",
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.describe_job(jobId=job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    client.delete_job(jobId=job_id)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    client.list_jobs()["jobs"].should.have.length_of(0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_iot
							 | 
						||
| 
								 | 
							
								def test_cancel_job():
							 | 
						||
| 
								 | 
							
								    client = boto3.client("iot", region_name="eu-west-1")
							 | 
						||
| 
								 | 
							
								    name = "my-thing"
							 | 
						||
| 
								 | 
							
								    job_id = "TestJob"
							 | 
						||
| 
								 | 
							
								    # thing
							 | 
						||
| 
								 | 
							
								    thing = client.create_thing(thingName=name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingName").which.should.equal(name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id,
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        documentSource="https://s3-eu-west-1.amazonaws.com/bucket-name/job_document.json",
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.describe_job(jobId=job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.cancel_job(jobId=job_id, reasonCode="Because", comment="You are")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.describe_job(jobId=job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job")
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("status").which.should.equal(
							 | 
						||
| 
								 | 
							
								        "CANCELED"
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key(
							 | 
						||
| 
								 | 
							
								        "forceCanceled"
							 | 
						||
| 
								 | 
							
								    ).which.should.equal(False)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("reasonCode").which.should.equal(
							 | 
						||
| 
								 | 
							
								        "Because"
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								    job.should.have.key("job").which.should.have.key("comment").which.should.equal(
							 | 
						||
| 
								 | 
							
								        "You are"
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_iot
							 | 
						||
| 
								 | 
							
								def test_get_job_document_with_document_source():
							 | 
						||
| 
								 | 
							
								    client = boto3.client("iot", region_name="eu-west-1")
							 | 
						||
| 
								 | 
							
								    name = "my-thing"
							 | 
						||
| 
								 | 
							
								    job_id = "TestJob"
							 | 
						||
| 
								 | 
							
								    # thing
							 | 
						||
| 
								 | 
							
								    thing = client.create_thing(thingName=name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingName").which.should.equal(name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id,
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        documentSource="https://s3-eu-west-1.amazonaws.com/bucket-name/job_document.json",
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job_document = client.get_job_document(jobId=job_id)
							 | 
						||
| 
								 | 
							
								    job_document.should.have.key("document").which.should.equal("")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@mock_iot
							 | 
						||
| 
								 | 
							
								def test_get_job_document_with_document():
							 | 
						||
| 
								 | 
							
								    client = boto3.client("iot", region_name="eu-west-1")
							 | 
						||
| 
								 | 
							
								    name = "my-thing"
							 | 
						||
| 
								 | 
							
								    job_id = "TestJob"
							 | 
						||
| 
								 | 
							
								    # thing
							 | 
						||
| 
								 | 
							
								    thing = client.create_thing(thingName=name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingName").which.should.equal(name)
							 | 
						||
| 
								 | 
							
								    thing.should.have.key("thingArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # job document
							 | 
						||
| 
								 | 
							
								    job_document = {"field": "value"}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job = client.create_job(
							 | 
						||
| 
								 | 
							
								        jobId=job_id,
							 | 
						||
| 
								 | 
							
								        targets=[thing["thingArn"]],
							 | 
						||
| 
								 | 
							
								        document=json.dumps(job_document),
							 | 
						||
| 
								 | 
							
								        presignedUrlConfig={
							 | 
						||
| 
								 | 
							
								            "roleArn": "arn:aws:iam::1:role/service-role/iot_job_role",
							 | 
						||
| 
								 | 
							
								            "expiresInSec": 123,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        targetSelection="CONTINUOUS",
							 | 
						||
| 
								 | 
							
								        jobExecutionsRolloutConfig={"maximumPerMinute": 10},
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobId").which.should.equal(job_id)
							 | 
						||
| 
								 | 
							
								    job.should.have.key("jobArn")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    job_document = client.get_job_document(jobId=job_id)
							 | 
						||
| 
								 | 
							
								    job_document.should.have.key("document").which.should.equal('{"field": "value"}')
							 |