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