diff --git a/test/Android.bp b/test/Android.bp
index b5bd3f2..6c99082 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -24,7 +24,8 @@
         "android.hardware.tests.inheritance@1.0",
         "android.hardware.tests.pointer@1.0",
         "android.hardware.tests.memory@1.0",
-        "android.hidl.memory@1.0", // TODO remove this line when b/32185232 is fixed
+        "android.hidl.memory@1.0",
+        "android.hidl.token@1.0",
     ],
     static_libs: ["libgtest"],
 
@@ -39,7 +40,6 @@
         "android.hardware.tests.inheritance@1.0-impl",
         "android.hardware.tests.pointer@1.0-impl",
         "android.hardware.tests.memory@1.0-impl",
-        "android.hidl.memory@1.0-impl", // TODO remove this line when b/32185232 is fixed
     ],
 
     cflags: [
diff --git a/test/main.cpp b/test/main.cpp
index fb0e773..e56608c 100644
--- a/test/main.cpp
+++ b/test/main.cpp
@@ -7,6 +7,8 @@
 #include <android/hidl/memory/1.0/IAllocator.h>
 #include <android/hidl/memory/1.0/IMemory.h>
 
+#include <android/hidl/token/1.0/ITokenManager.h>
+
 #include <android/hardware/tests/foo/1.0/IFoo.h>
 #include <android/hardware/tests/foo/1.0/IFooCallback.h>
 #include <android/hardware/tests/foo/1.0/BnSimple.h>
@@ -106,6 +108,7 @@
 using ::android::hidl::manager::V1_0::IServiceNotification;
 using ::android::hidl::memory::V1_0::IAllocator;
 using ::android::hidl::memory::V1_0::IMemory;
+using ::android::hidl::token::V1_0::ITokenManager;
 using ::android::sp;
 using ::android::wp;
 using ::android::to_string;
@@ -317,6 +320,7 @@
 
 public:
     sp<IServiceManager> manager;
+    sp<ITokenManager> tokenManager;
     sp<IAllocator> ashmemAllocator;
     sp<IMemoryTest> memoryTest;
     sp<IFetcher> fetcher;
@@ -343,13 +347,17 @@
         ASSERT_NE(manager, nullptr);
         ASSERT_TRUE(manager->isRemote()); // manager is always remote
 
+        tokenManager = ITokenManager::getService("manager");
+        ASSERT_NE(tokenManager, nullptr);
+        ASSERT_TRUE(tokenManager->isRemote()); // tokenManager is always remote
+
+        ashmemAllocator = IAllocator::getService("ashmem");
+        ASSERT_NE(ashmemAllocator, nullptr);
+        ASSERT_TRUE(ashmemAllocator->isRemote()); // allocator is always remote
+
         // getStub is true if we are in passthrough mode to skip checking
         // binderized server, false for binderized mode.
 
-        ashmemAllocator = IAllocator::getService("ashmem", gMode == PASSTHROUGH /* getStub */);
-        ASSERT_NE(ashmemAllocator, nullptr);
-        ASSERT_EQ(ashmemAllocator->isRemote(), gMode == BINDERIZED);
-
         memoryTest = IMemoryTest::getService("memory", gMode == PASSTHROUGH /* getStub */);
         ASSERT_NE(memoryTest, nullptr);
         ASSERT_EQ(memoryTest->isRemote(), gMode == BINDERIZED);
@@ -427,7 +435,6 @@
         ALOGI("Environment setup beginning...");
 
         size_t i = 0;
-        addServer<IAllocator>("ashmem");
         addServer<IMemoryTest>("memory");
         addServer<IChild>("child");
         addServer<IParent>("parent");
@@ -447,6 +454,7 @@
 class HidlTest : public ::testing::Test {
 public:
     sp<IServiceManager> manager;
+    sp<ITokenManager> tokenManager;
     sp<IAllocator> ashmemAllocator;
     sp<IMemoryTest> memoryTest;
     sp<IFetcher> fetcher;
@@ -477,6 +485,7 @@
             env = gPassthroughEnvironment;
         }
         manager = env->manager;
+        tokenManager = env->tokenManager;
         ashmemAllocator = env->ashmemAllocator;
         memoryTest = env->memoryTest;
         fetcher = env->fetcher;
@@ -644,6 +653,29 @@
     }
 }
 
+TEST_F(HidlTest, TestToken) {
+    Return<uint64_t> ret = tokenManager->createToken(manager);
+    EXPECT_OK(ret);
+    uint64_t token = ret;
+
+    EXPECT_OK(tokenManager->get(token, [&](const auto &store) {
+        EXPECT_NE(nullptr, store.get());
+        sp<IServiceManager> retManager = IServiceManager::castFrom(store);
+
+        // TODO(b/33818800): should have only one Bp per process
+        // EXPECT_EQ(manager, retManager);
+
+        EXPECT_NE(nullptr, retManager.get());
+    }));
+
+    Return<bool> unregisterRet = tokenManager->unregister(token);
+
+    EXPECT_OK(unregisterRet);
+    if (unregisterRet.isOk()) {
+        EXPECT_TRUE(ret);
+    }
+}
+
 TEST_F(HidlTest, TestSharedMemory) {
     const uint8_t kValue = 0xCA;
     hidl_memory mem_copy;
