diff --git a/xos/tosca/resources/activetesttenant.py b/xos/tosca/resources/activetesttenant.py
new file mode 100644
index 0000000..7b1a09d
--- /dev/null
+++ b/xos/tosca/resources/activetesttenant.py
@@ -0,0 +1,29 @@
+from core.models import Tenant, Service
+from services.activetest.models import ActiveTestTenant, ACTIVETEST_KIND as ACTIVETESTTENANT_KIND
+
+from xosresource import XOSResource
+
+class XOSActiveTestTenant(XOSResource):
+    provides = "tosca.nodes.ActiveTestTenant"
+    xos_model = ActiveTestTenant
+    name_field = "service_specific_id"
+    copyin_props = ("tenant_message",)
+
+    def get_xos_args(self, throw_exception=True):
+        args = super(XOSActiveTestTenant, self).get_xos_args()
+
+        # ActiveTestTenant must always have a provider_service
+        provider_name = self.get_requirement("tosca.relationships.TenantOfService", throw_exception=True)
+        if provider_name:
+            args["provider_service"] = self.get_xos_object(Service, throw_exception=True, name=provider_name)
+
+        return args
+
+    def get_existing_objs(self):
+        args = self.get_xos_args(throw_exception=False)
+        return ActiveTestTenant.get_tenant_objects().filter(provider_service=args["provider_service"], service_specific_id=args["service_specific_id"])
+        return []
+
+    def can_delete(self, obj):
+        return super(XOSActiveTestTenant, self).can_delete(obj)
+
