Using moto and freezegun to test old AWS IAM User Access Keys

Recently I had to develop a lambda that deletes Access Keys from AWS IAM Users that are past a certain age. To test this I had to create Access Keys that have a create date in the past, however, an access key that is created with boto3's create_access_key() method has the current date.
So I had to do some time traveling, luckily FreezeGun allows me to do exactly that.
Simply install the freezegun module: pip install freezegun and import it in your test: from freezegun import freeze_time. Now you can use the @freeze_time decorator to travel in time!
An example:
@freeze_time("2012-01-14")
def test():
assert datetime.datetime.now() == datetime.datetime(2012, 1, 14)
For my tests I needed multiple access keys with different create dates.
I've created a test fixture for that:
@pytest.fixture
def test_users(iam_client):
today = datetime.date.today()
with freeze_time(today - datetime.timedelta(days=20)):
iam_client.create_user(
UserName='20days',
)
iam_client.create_access_key(
UserName='20days'
)
with freeze_time(today - datetime.timedelta(days=70)):
iam_client.create_user(
UserName='70days',
)
iam_client.create_access_key(
UserName='70days'
)
with freeze_time(today - datetime.timedelta(days=100)):
iam_client.create_user(
UserName='100days',
)
iam_client.create_access_key(
UserName='100days'
)
yield
As you can see I first set the current date. Then I use the timedelta() method to subtract some days from today, resulting in three IAM Users with an Access Key that is 20, 70 and 100 days old.
About the author
Hi, I am a cloud engineer from Barneveld, The Netherlands. I specialize in AWS but also do some backend and frontend development.
I am currently employed full-time and am a mentor at CoderDojo Amersfoort, The Netherlands.
Please feel free to get in touch if you have any questions for me.
Comments
Join the discussionNo comments yet. Be the first to comment.



