def testReuseSlotID(t, env): """ If client reuses a slot ID and sequence ID for a completely different request, server MAY treat the request as if it is a retry of what it has already executed. rfc5661 18.46.3 FLAGS: sequence all CODE: SEQ14 """ c = env.c1.new_client(env.testname(t)) # CREATE_SESSION sess1 = c.create_session() name = "%s_1" % env.testname(t) res = create_file(sess1, name) check(res) sid = sess1.sessionid seqid = nfs4lib.inc_u32(sess1.seqid) dir = sess1.c.homedir res = c.c.compound([op.sequence(sid, seqid, 0, 0, TRUE)] + nfs4lib.use_obj(dir) + [op.remove(name)]) check(res) # Reuses slot ID and sequence ID for different request res = c.c.compound([op.sequence(sid, seqid, 0, 0, TRUE)] + nfs4lib.use_obj(dir) + [op.rename(name, "test")]) check(res)
def clean_dir(sess, path): stateid = nfs4lib.state00 # fh = self.do_getfh(path) entries = do_readdir(sess, path) for e in entries: # We separate setattr and remove to avoid an inode locking bug ops = use_obj(path + [e.name]) ops += [op.setattr(stateid, {FATTR4_MODE:0755})] res = sess.compound(ops) check(res, msg="Setting mode on %s" % repr(e.name)) ops = use_obj(path) ops += [op.remove(e.name)] res = sess.compound(ops) if res.status == NFS4ERR_NOTEMPTY: clean_dir(sess, path + [e.name]) res = sess.compound(ops) check(res, msg="Trying to remove %s" % repr(e.name))