diff --git a/tests/test_lxd.py b/tests/test_lxd.py
new file mode 100644
index 0000000..f68fa3a
--- /dev/null
+++ b/tests/test_lxd.py
@@ -0,0 +1,96 @@
+"""
+This test exercises LXD, to make sure that we can:
+1. Create a container profile
+2. Launch a container with a profile
+3. Stop a container
+4. Destroy a container
+5. Delete a container profile
+
+"""
+import logging
+# import os
+import pytest
+from . import base
+import subprocess
+import shlex
+import tempfile
+
+
+@pytest.mark.asyncio
+async def test_lxd():
+
+    container = base.create_lxd_container(name="test-lxd")
+    assert container is not None
+
+    # Get the hostname of the container
+    hostname = container.name
+
+    # Delete the container
+    base.destroy_lxd_container(container)
+
+    # Verify the container is deleted
+    client = base.get_lxd_client()
+    assert client.containers.exists(hostname) is False
+
+
+@pytest.mark.asyncio
+async def test_lxd_ssh():
+
+    with tempfile.TemporaryDirectory() as tmp:
+        try:
+            # Create a temporary keypair
+            cmd = shlex.split(
+                "ssh-keygen -t rsa -b 4096 -N '' -f {}/id_lxd_rsa".format(
+                    tmp,
+                )
+            )
+            subprocess.check_call(cmd)
+        except subprocess.CalledProcessError as e:
+            logging.debug(e)
+            assert False
+
+        # Slurp the public key
+        public_key = None
+        with open("{}/id_lxd_rsa.pub".format(tmp), "r") as f:
+            public_key = f.read()
+
+        assert public_key is not None
+
+        # Create the container with the keypair injected via profile
+        container = base.create_lxd_container(
+            public_key=public_key,
+            name="test-lxd"
+        )
+        assert container is not None
+
+        # Get the hostname of the container
+        hostname = container.name
+
+        addresses = container.state().network['eth0']['addresses']
+        # The interface may have more than one address, but we only need
+        # the first one for testing purposes.
+        ipaddr = addresses[0]['address']
+
+        # Verify we can SSH into container
+        try:
+            cmd = shlex.split(
+                "ssh -i {}/id_lxd_rsa {} root@{} hostname".format(
+                    tmp,
+                    "-oStrictHostKeyChecking=no",
+                    ipaddr,
+                )
+            )
+            subprocess.check_call(cmd)
+        except subprocess.CalledProcessError as e:
+            logging.debug(e)
+            assert False
+
+        # Delete the container
+        base.destroy_lxd_container(container)
+
+        # Verify the container is deleted
+        client = base.get_lxd_client()
+        assert client.containers.exists(hostname) is False
+
+        # Verify the container profile is deleted
+        assert client.profiles.exists(hostname) is False
