1*eda14cbcSMatt Macy#!/bin/ksh -p 2*eda14cbcSMatt Macy# 3*eda14cbcSMatt Macy# This file and its contents are supplied under the terms of the 4*eda14cbcSMatt Macy# Common Development and Distribution License ("CDDL"), version 1.0. 5*eda14cbcSMatt Macy# You may only use this file in accordance with the terms of version 6*eda14cbcSMatt Macy# 1.0 of the CDDL. 7*eda14cbcSMatt Macy# 8*eda14cbcSMatt Macy# A full copy of the text of the CDDL should have accompanied this 9*eda14cbcSMatt Macy# source. A copy of the CDDL is also available via the Internet at 10*eda14cbcSMatt Macy# http://www.illumos.org/license/CDDL. 11*eda14cbcSMatt Macy# 12*eda14cbcSMatt Macy 13*eda14cbcSMatt Macy# 14*eda14cbcSMatt Macy# Copyright (c) 2016 by Delphix. All rights reserved. 15*eda14cbcSMatt Macy# 16*eda14cbcSMatt Macy 17*eda14cbcSMatt Macy. $STF_SUITE/tests/functional/channel_program/channel_common.kshlib 18*eda14cbcSMatt Macy 19*eda14cbcSMatt Macy 20*eda14cbcSMatt Macy# 21*eda14cbcSMatt Macy# DESCRIPTION: 22*eda14cbcSMatt Macy# Passing memory limit options to channel programs should work correctly. 23*eda14cbcSMatt Macy# Programs that exceed these limits should fail gracefully. 24*eda14cbcSMatt Macy 25*eda14cbcSMatt Macy 26*eda14cbcSMatt Macyverify_runnable "global" 27*eda14cbcSMatt Macy 28*eda14cbcSMatt Macylog_mustnot_checkerror_program "Memory limit exhausted" \ 29*eda14cbcSMatt Macy -t 100000000 $TESTPOOL - <<-EOF 30*eda14cbcSMatt Macy a = {}; 31*eda14cbcSMatt Macy i = 0; 32*eda14cbcSMatt Macy while true do 33*eda14cbcSMatt Macy i = i + 1 34*eda14cbcSMatt Macy a[i] = "Here is the " .. i .. "th entry of a" 35*eda14cbcSMatt Macy end; 36*eda14cbcSMatt Macy return a 37*eda14cbcSMatt MacyEOF 38*eda14cbcSMatt Macy 39*eda14cbcSMatt Macylog_assert "memory limit options work" 40*eda14cbcSMatt Macylog_mustnot_checkerror_program "Memory limit exhausted" \ 41*eda14cbcSMatt Macy -m 100000 -t 100000000 $TESTPOOL - <<-EOF 42*eda14cbcSMatt Macy a = {}; 43*eda14cbcSMatt Macy i = 0; 44*eda14cbcSMatt Macy while true do 45*eda14cbcSMatt Macy i = i + 1 46*eda14cbcSMatt Macy a[i] = "Here is the " .. i .. "th entry of a" 47*eda14cbcSMatt Macy end; 48*eda14cbcSMatt Macy return a 49*eda14cbcSMatt MacyEOF 50*eda14cbcSMatt Macy 51*eda14cbcSMatt Macylog_must_program -m 100000 $TESTPOOL - <<-EOF 52*eda14cbcSMatt Macy s = "teststring" 53*eda14cbcSMatt Macy s = s .. s .. s .. s 54*eda14cbcSMatt Macy return s 55*eda14cbcSMatt MacyEOF 56*eda14cbcSMatt Macy 57*eda14cbcSMatt Macylog_assert "very small memory limits fail correctly" 58*eda14cbcSMatt Macylog_mustnot_checkerror_program "Memory limit exhausted" -m 1 $TESTPOOL - <<-EOF 59*eda14cbcSMatt Macy s = "teststring" 60*eda14cbcSMatt Macy s = s .. s .. s .. s 61*eda14cbcSMatt Macy return s 62*eda14cbcSMatt MacyEOF 63*eda14cbcSMatt Macy 64*eda14cbcSMatt Macy# Set the memlimit, in case it is a non-default value 65*eda14cbcSMatt Macylog_must set_tunable32 LUA_MAX_MEMLIMIT 100000000 66*eda14cbcSMatt Macy 67*eda14cbcSMatt Macylog_mustnot_checkerror_program "Invalid instruction or memory limit" \ 68*eda14cbcSMatt Macy -m 200000000 $TESTPOOL - <<-EOF 69*eda14cbcSMatt Macy return 1; 70*eda14cbcSMatt MacyEOF 71*eda14cbcSMatt Macy 72*eda14cbcSMatt Macylog_mustnot_checkerror_program "Return value too large" \ 73*eda14cbcSMatt Macy -m 9223372036854775808 $TESTPOOL - <<-EOF 74*eda14cbcSMatt Macy return 1; 75*eda14cbcSMatt MacyEOF 76*eda14cbcSMatt Macy 77*eda14cbcSMatt Macylog_pass "Memory limits work correctly." 78