diff --git a/test/integration/esys-pcr-basic.int.c b/test/integration/esys-pcr-basic.int.c
new file mode 100644
index 0000000..08cbb28
--- /dev/null
+++ b/test/integration/esys-pcr-basic.int.c
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ *******************************************************************************/
+
+#include "tss2_esys.h"
+
+#include "esys_iutil.h"
+#define LOGMODULE test
+#include "util/log.h"
+
+/* Test the basic commands for PCR processing: Esys_PCR_Extend */
+
+int
+test_invoke_esapi(ESYS_CONTEXT * esys_context)
+{
+    uint32_t r = 0;
+
+#ifdef TEST_SESSION
+    ESYS_TR session;
+    TPMT_SYM_DEF symmetric = {.algorithm = TPM2_ALG_AES,
+                              .keyBits = {.aes = 128},
+                              .mode = {.aes = TPM2_ALG_CFB}
+    };
+    TPMA_SESSION sessionAttributes;
+    TPM2B_NONCE *nonceTpm;
+    TPM2B_NONCE nonceCaller = {
+        .size = 20,
+        .buffer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+                   11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
+    };
+
+    memset(&sessionAttributes, 0, sizeof sessionAttributes);
+
+    r = Esys_StartAuthSession(esys_context, ESYS_TR_NONE, ESYS_TR_NONE,
+                              ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE,
+                              &nonceCaller,
+                              TPM2_SE_HMAC, &symmetric, TPM2_ALG_SHA1, &session,
+                              &nonceTpm);
+
+    goto_if_error(r, "Error: During initialization of session", error);
+#endif /* TEST_SESSION */
+
+    ESYS_TR  pcrHandle_handle = 1;
+    TPML_DIGEST_VALUES digests
+        = {
+        .count = 1,
+        .digests = {
+            {
+                .hashAlg = TPM2_ALG_SHA1,
+                .digest = {
+                    .sha1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
+                }
+            },
+        }};
+
+    r = Esys_PCR_Extend (
+        esys_context,
+        pcrHandle_handle,
+#ifdef TEST_SESSION
+        session,
+#else
+        ESYS_TR_PASSWORD,
+#endif
+        ESYS_TR_NONE,
+        ESYS_TR_NONE,
+        &digests
+        );
+    goto_if_error(r, "Error: PCR_Extend", error);
+
+    return 0;
+
+ error:
+    return 1;
+
+}
