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"}')
|