@@ -50,3 +50,29 @@ def testReclaimAfterRECC(t, env):
res = sess.compound([op.putfh(cfh), op.lock(READ_LT, TRUE, 0, 1, lowner)])
check(res, NFS4ERR_NO_GRACE)
+
+def testLockBeforeRECC(t, env):
+ """After a client establishes a new client ID, if non-reclaim
+ locking operations are done before the RECLAIM_COMPLETE,
+ error NFS4ERR_GRACE will be returned. rfc5661 18.51.3
+
+ FLAGS: all
+ CODE: RECC3
+ """
+ name = env.testname(t)
+ c = env.c1.new_client(name)
+ sess = c.create_session()
+
+ fname = "owner_%s" % name
+ path = sess.c.homedir + [name]
+ res = create_file(sess, fname, path, access=OPEN4_SHARE_ACCESS_BOTH)
+ check(res)
+
+ oseqid = res.resarray[2].stateid
+ cfh = res.resarray[3].object
+ owner = open_owner4(0, "My Open Owner")
+ otlowner = open_to_lock_owner4(0, oseqid, 0, owner)
+ lowner = locker4(TRUE, otlowner)
+
+ res = sess.compound([op.putfh(cfh), op.lock(READ_LT, FALSE, 0, 1, lowner)])
+ check(res, NFS4ERR_NO_GRACE)