1716fd348SMartin Matuska#!/bin/ksh -p 2716fd348SMartin Matuska# 3716fd348SMartin Matuska# CDDL HEADER START 4716fd348SMartin Matuska# 5716fd348SMartin Matuska# The contents of this file are subject to the terms of the 6716fd348SMartin Matuska# Common Development and Distribution License (the "License"). 7716fd348SMartin Matuska# You may not use this file except in compliance with the License. 8716fd348SMartin Matuska# 9716fd348SMartin Matuska# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*271171e0SMartin Matuska# or https://opensource.org/licenses/CDDL-1.0. 11716fd348SMartin Matuska# See the License for the specific language governing permissions 12716fd348SMartin Matuska# and limitations under the License. 13716fd348SMartin Matuska# 14716fd348SMartin Matuska# When distributing Covered Code, include this CDDL HEADER in each 15716fd348SMartin Matuska# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16716fd348SMartin Matuska# If applicable, add the following below this CDDL HEADER, with the 17716fd348SMartin Matuska# fields enclosed by brackets "[]" replaced with your own identifying 18716fd348SMartin Matuska# information: Portions Copyright [yyyy] [name of copyright owner] 19716fd348SMartin Matuska# 20716fd348SMartin Matuska# CDDL HEADER END 21716fd348SMartin Matuska# 22716fd348SMartin Matuska 23716fd348SMartin Matuska# 24716fd348SMartin Matuska# Copyright (c) 2022 by Triad National Security, LCC 25716fd348SMartin Matuska# 26716fd348SMartin Matuska 27716fd348SMartin Matuska. $STF_SUITE/include/libtest.shlib 28716fd348SMartin Matuska 29716fd348SMartin Matuska# 30716fd348SMartin Matuska# DESCRIPTION: 31716fd348SMartin Matuska# Tests file offset using O_APPEND. 32716fd348SMartin Matuska# 33716fd348SMartin Matuska# STRATEGY: 34716fd348SMartin Matuska# 1. Open file using O_APPEND 35716fd348SMartin Matuska# 2. Write to the file using random number of blocks (1, 2, or 3) 36716fd348SMartin Matuska# 3. Verify that the file offset is correct using lseek after the write 37716fd348SMartin Matuska# 4. Repeat steps 2 and 3, 5 times 38716fd348SMartin Matuska# 5. Close the file. 39716fd348SMartin Matuska# 6. Repeat steps 1-5 but also open file with O_DIRECT 40716fd348SMartin Matuska# 41716fd348SMartin Matuska 42716fd348SMartin Matuskaverify_runnable "global" 43716fd348SMartin Matuska 44716fd348SMartin Matuskalog_assert "Ensure file offset is updated correctly when opened with O_APPEND" 45716fd348SMartin Matuska 46716fd348SMartin Matuskamntpt=$(get_prop mountpoint $TESTPOOL/$TESTFS) 47716fd348SMartin Matuskafilename=$mntpt/append_file.txt 48716fd348SMartin Matuskabs=131072 49716fd348SMartin MatuskaITERATIONS=5 50716fd348SMartin Matuskaexpected=0 51716fd348SMartin Matuska 52716fd348SMartin Matuska# First test using buffered writes with O_APPEND 53716fd348SMartin Matuskafor i in $(seq $ITERATIONS); do 54716fd348SMartin Matuska num_blocks=$(random_int_between 1 3) 55716fd348SMartin Matuska expected=$((expected + ( bs * num_blocks))) 56716fd348SMartin Matuska log_must file_append -f $filename -e $expected -b $bs -n $num_blocks 57716fd348SMartin Matuska curr_offset=$expected 58716fd348SMartin Matuskadone 59716fd348SMartin Matuska 60716fd348SMartin Matuskalog_must rm -f $filename 61716fd348SMartin Matuska 62716fd348SMartin Matuskaexpected=0 63716fd348SMartin Matuska 64716fd348SMartin Matuska# Repeat same test using O_DIRECT writes with O_APPEND 65716fd348SMartin Matuskafor i in $(seq $ITERATIONS); do 66716fd348SMartin Matuska num_blocks=$(random_int_between 1 3) 67716fd348SMartin Matuska expected=$((expected + ( bs * num_blocks))) 68716fd348SMartin Matuska log_must file_append -f $filename -e $expected -b $bs -n $num_blocks -d 69716fd348SMartin Matuskadone 70716fd348SMartin Matuska 71716fd348SMartin Matuskalog_must rm -f $filename 72716fd348SMartin Matuska 73716fd348SMartin Matuskalog_pass "File offset updated correctly when opening a file with O_APPEND." 74