Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
BIND
Commits
275c6188
Commit
275c6188
authored
Dec 22, 2000
by
Andreas Gustafsson
Browse files
added stress test
parent
93ac5ecb
Changes
14
Hide whitespace changes
Inline
Side-by-side
bin/tests/system/stress/clean.sh
0 → 100644
View file @
275c6188
#!/bin/sh
#
# Copyright (C) 2000 Internet Software Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# $Id: clean.sh,v 1.1 2000/12/22 17:03:01 gson Exp $
rm
-f
reload.pid
rm
-f
ns?/zones.conf
rm
-f
ns?/zone
*
.bk
rm
-f
ns1/delegations.db
rm
-f
ns2/zone0
*
.db
rm
-f
ns2/zone0
*
.jnl
bin/tests/system/stress/ns1/.cvsignore
0 → 100644
View file @
275c6188
named.run
bin/tests/system/stress/ns1/named.conf
0 → 100644
View file @
275c6188
/*
*
Copyright
(
C
)
2000
Internet
Software
Consortium
.
*
*
Permission
to
use
,
copy
,
modify
,
and
distribute
this
software
for
any
*
purpose
with
or
without
fee
is
hereby
granted
,
provided
that
the
above
*
copyright
notice
and
this
permission
notice
appear
in
all
copies
.
*
*
THE
SOFTWARE
IS
PROVIDED
"AS IS"
AND
INTERNET
SOFTWARE
CONSORTIUM
*
DISCLAIMS
ALL
WARRANTIES
WITH
REGARD
TO
THIS
SOFTWARE
INCLUDING
ALL
*
IMPLIED
WARRANTIES
OF
MERCHANTABILITY
AND
FITNESS
.
IN
NO
EVENT
SHALL
*
INTERNET
SOFTWARE
CONSORTIUM
BE
LIABLE
FOR
ANY
SPECIAL
,
DIRECT
,
*
INDIRECT
,
OR
CONSEQUENTIAL
DAMAGES
OR
ANY
DAMAGES
WHATSOEVER
RESULTING
*
FROM
LOSS
OF
USE
,
DATA
OR
PROFITS
,
WHETHER
IN
AN
ACTION
OF
CONTRACT
,
*
NEGLIGENCE
OR
OTHER
TORTIOUS
ACTION
,
ARISING
OUT
OF
OR
IN
CONNECTION
*
WITH
THE
USE
OR
PERFORMANCE
OF
THIS
SOFTWARE
.
*/
/* $
Id
:
named
.
conf
,
v
1
.
1
2000
/
12
/
22
17
:
03
:
02
gson
Exp
$ */
options
{
query
-
source
address
10
.
53
.
0
.
1
;
notify
-
source
10
.
53
.
0
.
1
;
transfer
-
source
10
.
53
.
0
.
1
;
port
5300
;
pid
-
file
"named.pid"
;
listen
-
on
{
10
.
53
.
0
.
1
; };
listen
-
on
-
v6
{
none
; };
recursion
no
;
notify
yes
;
};
zone
"."
{
type
master
;
file
"root.db"
;
};
bin/tests/system/stress/ns1/root.db
0 → 100644
View file @
275c6188
300
. IN SOA gson.nominum.com. a.root.servers.nil. (
2000042100 ; serial
600 ; refresh
600 ; retry
1200 ; expire
600 ; minimum
)
. NS a.root-servers.nil.
a.root-servers.nil. A 10.53.0.1
zone000000.example. NS ns2.zone000000.example.
ns2.zone000000.example. A 10.53.0.2
zone000000.example. NS ns3.zone000000.example.
ns3.zone000000.example. A 10.53.0.3
zone000000.example. NS ns4.zone000000.example.
ns4.zone000000.example. A 10.53.0.4
zone000001.example. NS ns2.zone000001.example.
ns2.zone000001.example. A 10.53.0.2
zone000001.example. NS ns3.zone000001.example.
ns3.zone000001.example. A 10.53.0.3
zone000001.example. NS ns4.zone000001.example.
ns4.zone000001.example. A 10.53.0.4
zone000002.example. NS ns2.zone000002.example.
ns2.zone000002.example. A 10.53.0.2
zone000002.example. NS ns3.zone000002.example.
ns3.zone000002.example. A 10.53.0.3
zone000002.example. NS ns4.zone000002.example.
ns4.zone000002.example. A 10.53.0.4
zone000003.example. NS ns2.zone000003.example.
ns2.zone000003.example. A 10.53.0.2
zone000003.example. NS ns3.zone000003.example.
ns3.zone000003.example. A 10.53.0.3
zone000003.example. NS ns4.zone000003.example.
ns4.zone000003.example. A 10.53.0.4
zone000004.example. NS ns2.zone000004.example.
ns2.zone000004.example. A 10.53.0.2
zone000004.example. NS ns3.zone000004.example.
ns3.zone000004.example. A 10.53.0.3
zone000004.example. NS ns4.zone000004.example.
ns4.zone000004.example. A 10.53.0.4
bin/tests/system/stress/ns2/.cvsignore
0 → 100644
View file @
275c6188
named.run
bin/tests/system/stress/ns2/named.conf
0 → 100644
View file @
275c6188
/*
*
Copyright
(
C
)
2000
Internet
Software
Consortium
.
*
*
Permission
to
use
,
copy
,
modify
,
and
distribute
this
software
for
any
*
purpose
with
or
without
fee
is
hereby
granted
,
provided
that
the
above
*
copyright
notice
and
this
permission
notice
appear
in
all
copies
.
*
*
THE
SOFTWARE
IS
PROVIDED
"AS IS"
AND
INTERNET
SOFTWARE
CONSORTIUM
*
DISCLAIMS
ALL
WARRANTIES
WITH
REGARD
TO
THIS
SOFTWARE
INCLUDING
ALL
*
IMPLIED
WARRANTIES
OF
MERCHANTABILITY
AND
FITNESS
.
IN
NO
EVENT
SHALL
*
INTERNET
SOFTWARE
CONSORTIUM
BE
LIABLE
FOR
ANY
SPECIAL
,
DIRECT
,
*
INDIRECT
,
OR
CONSEQUENTIAL
DAMAGES
OR
ANY
DAMAGES
WHATSOEVER
RESULTING
*
FROM
LOSS
OF
USE
,
DATA
OR
PROFITS
,
WHETHER
IN
AN
ACTION
OF
CONTRACT
,
*
NEGLIGENCE
OR
OTHER
TORTIOUS
ACTION
,
ARISING
OUT
OF
OR
IN
CONNECTION
*
WITH
THE
USE
OR
PERFORMANCE
OF
THIS
SOFTWARE
.
*/
/* $
Id
:
named
.
conf
,
v
1
.
1
2000
/
12
/
22
17
:
03
:
02
gson
Exp
$ */
options
{
query
-
source
address
10
.
53
.
0
.
2
;
notify
-
source
10
.
53
.
0
.
2
;
transfer
-
source
10
.
53
.
0
.
2
;
port
5300
;
pid
-
file
"named.pid"
;
listen
-
on
{
10
.
53
.
0
.
2
; };
listen
-
on
-
v6
{
none
; };
recursion
no
;
notify
yes
;
};
zone
"."
{
type
hint
;
file
"../common/root.hint"
;
};
include
"zones.conf"
;
bin/tests/system/stress/ns3/.cvsignore
0 → 100644
View file @
275c6188
named.run
bin/tests/system/stress/ns3/named.conf
0 → 100644
View file @
275c6188
/*
*
Copyright
(
C
)
2000
Internet
Software
Consortium
.
*
*
Permission
to
use
,
copy
,
modify
,
and
distribute
this
software
for
any
*
purpose
with
or
without
fee
is
hereby
granted
,
provided
that
the
above
*
copyright
notice
and
this
permission
notice
appear
in
all
copies
.
*
*
THE
SOFTWARE
IS
PROVIDED
"AS IS"
AND
INTERNET
SOFTWARE
CONSORTIUM
*
DISCLAIMS
ALL
WARRANTIES
WITH
REGARD
TO
THIS
SOFTWARE
INCLUDING
ALL
*
IMPLIED
WARRANTIES
OF
MERCHANTABILITY
AND
FITNESS
.
IN
NO
EVENT
SHALL
*
INTERNET
SOFTWARE
CONSORTIUM
BE
LIABLE
FOR
ANY
SPECIAL
,
DIRECT
,
*
INDIRECT
,
OR
CONSEQUENTIAL
DAMAGES
OR
ANY
DAMAGES
WHATSOEVER
RESULTING
*
FROM
LOSS
OF
USE
,
DATA
OR
PROFITS
,
WHETHER
IN
AN
ACTION
OF
CONTRACT
,
*
NEGLIGENCE
OR
OTHER
TORTIOUS
ACTION
,
ARISING
OUT
OF
OR
IN
CONNECTION
*
WITH
THE
USE
OR
PERFORMANCE
OF
THIS
SOFTWARE
.
*/
/* $
Id
:
named
.
conf
,
v
1
.
1
2000
/
12
/
22
17
:
03
:
02
gson
Exp
$ */
options
{
query
-
source
address
10
.
53
.
0
.
3
;
notify
-
source
10
.
53
.
0
.
3
;
transfer
-
source
10
.
53
.
0
.
3
;
port
5300
;
pid
-
file
"named.pid"
;
listen
-
on
{
10
.
53
.
0
.
3
; };
listen
-
on
-
v6
{
none
; };
recursion
yes
;
notify
yes
;
};
key
rndc_key
{
secret
"1234abcd8765"
;
algorithm
hmac
-
md5
;
};
controls
{
inet
10
.
53
.
0
.
3
port
9953
allow
{
any
; }
keys
{
rndc_key
; };
};
zone
"."
{
type
hint
;
file
"../common/root.hint"
;
};
server
10
.
53
.
0
.
4
{
provide
-
ixfr
no
;
};
server
10
.
53
.
0
.
2
{
request
-
ixfr
no
;
};
include
"zones.conf"
;
bin/tests/system/stress/ns4/.cvsignore
0 → 100644
View file @
275c6188
named.run
bin/tests/system/stress/ns4/named.conf
0 → 100644
View file @
275c6188
/*
*
Copyright
(
C
)
2000
Internet
Software
Consortium
.
*
*
Permission
to
use
,
copy
,
modify
,
and
distribute
this
software
for
any
*
purpose
with
or
without
fee
is
hereby
granted
,
provided
that
the
above
*
copyright
notice
and
this
permission
notice
appear
in
all
copies
.
*
*
THE
SOFTWARE
IS
PROVIDED
"AS IS"
AND
INTERNET
SOFTWARE
CONSORTIUM
*
DISCLAIMS
ALL
WARRANTIES
WITH
REGARD
TO
THIS
SOFTWARE
INCLUDING
ALL
*
IMPLIED
WARRANTIES
OF
MERCHANTABILITY
AND
FITNESS
.
IN
NO
EVENT
SHALL
*
INTERNET
SOFTWARE
CONSORTIUM
BE
LIABLE
FOR
ANY
SPECIAL
,
DIRECT
,
*
INDIRECT
,
OR
CONSEQUENTIAL
DAMAGES
OR
ANY
DAMAGES
WHATSOEVER
RESULTING
*
FROM
LOSS
OF
USE
,
DATA
OR
PROFITS
,
WHETHER
IN
AN
ACTION
OF
CONTRACT
,
*
NEGLIGENCE
OR
OTHER
TORTIOUS
ACTION
,
ARISING
OUT
OF
OR
IN
CONNECTION
*
WITH
THE
USE
OR
PERFORMANCE
OF
THIS
SOFTWARE
.
*/
/* $
Id
:
named
.
conf
,
v
1
.
1
2000
/
12
/
22
17
:
03
:
03
gson
Exp
$ */
options
{
query
-
source
address
10
.
53
.
0
.
4
;
notify
-
source
10
.
53
.
0
.
4
;
transfer
-
source
10
.
53
.
0
.
4
;
port
5300
;
pid
-
file
"named.pid"
;
listen
-
on
{
10
.
53
.
0
.
4
; };
listen
-
on
-
v6
{
none
; };
recursion
yes
;
notify
yes
;
};
zone
"."
{
type
hint
;
file
"../common/root.hint"
;
};
include
"zones.conf"
;
bin/tests/system/stress/setup.pl
0 → 100644
View file @
275c6188
#!/usr/bin/perl
#
# Copyright (C) 2000 Internet Software Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# $Id: setup.pl,v 1.1 2000/12/22 17:03:01 gson Exp $
#
# Set up test data for zone transfer quota tests.
#
use
FileHandle
;
my
$n_zones
=
5
;
my
$n_names
=
1000
;
make_zones
(
2
,
undef
);
make_zones
(
3
,
"
10.53.0.2
");
make_zones
(
4
,
"
10.53.0.3
");
my
$rootdelegations
=
new
FileHandle
("
ns1/root.db
",
"
w
")
or
die
;
print
$rootdelegations
<<END;
$TTL 300
. IN SOA gson.nominum.com. a.root.servers.nil. (
2000042100 ; serial
600 ; refresh
600 ; retry
1200 ; expire
600 ; minimum
)
. NS a.root-servers.nil.
a.root-servers.nil. A 10.53.0.1
END
for
(
$z
=
0
;
$z
<
$n_zones
;
$z
++
)
{
my
$zn
=
sprintf
("
zone%06d.example
",
$z
);
foreach
$ns
(
qw(2 3 4)
)
{
print
$rootdelegations
"
$zn
. NS ns
$ns
.
$zn
.
\n
";
print
$rootdelegations
"
ns
$ns
.
$zn
. A 10.53.0.
$ns
\n
";
}
}
close
$rootdelegations
;
sub
make_zones
{
my
(
$nsno
,
$slaved_from
)
=
@_
;
my
$namedconf
=
new
FileHandle
("
ns
$nsno
/zones.conf
",
"
w
")
or
die
;
for
(
$z
=
0
;
$z
<
$n_zones
;
$z
++
)
{
my
$zn
=
sprintf
("
zone%06d.example
",
$z
);
if
(
defined
(
$slaved_from
))
{
print
$namedconf
"
zone
\"
$zn
\"
{ type slave;
"
.
"
file
\"
$zn
.bk
\"
; masters {
$slaved_from
; }; };
\n
";
}
else
{
print
$namedconf
"
zone
\"
$zn
\"
{
"
.
"
type master;
"
.
"
allow-update { any; };
"
.
"
file
\"
$zn
.db
\"
; };
\n
";
my
$fn
=
"
ns
$nsno
/
$zn
.db
";
my
$f
=
new
FileHandle
(
$fn
,
"
w
")
or
die
"
open:
$fn
: $!
";
print
$f
"
\$
TTL 300
\@
IN SOA ns2.
$zn
. hostmaster 1 300 120 3600 86400
@ NS ns2.
$zn
.
ns2.
$zn
. A 10.53.0.2
@ NS ns3.
$zn
.
ns3.
$zn
. A 10.53.0.3
@ NS ns4.
$zn
.
ns4.
$zn
. A 10.53.0.4
MX 10 mail1.isp.example.
MX 20 mail2.isp.example.
";
for
(
$i
=
0
;
$i
<
$n_names
;
$i
++
)
{
print
$f
sprintf
("
name%06d
",
$i
)
.
"
A 10.0.0.1
\n
";
}
$f
->
close
;
}
}
}
bin/tests/system/stress/setup.sh
0 → 100644
View file @
275c6188
#!/bin/sh
#
# Copyright (C) 2000 Internet Software Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# $Id: setup.sh,v 1.1 2000/12/22 17:03:01 gson Exp $
#
# Set up test data for zone transfer quota tests.
#
$PERL
setup.pl
bin/tests/system/stress/tests.sh
0 → 100644
View file @
275c6188
#!/bin/sh
#
# Copyright (C) 2000 Internet Software Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# $Id: tests.sh,v 1.1 2000/12/22 17:03:01 gson Exp $
SYSTEMTESTTOP
=
..
.
$SYSTEMTESTTOP
/conf.sh
status
=
0
if
$PERL
-e
'use Net::DNS;'
2>/dev/null
then
:
else
echo
"I:This test requires the Net::DNS library."
>
&2
exit
1
fi
(
sh
-c
"while true
do
$RNDC
-c ../common/rndc.conf -s 10.53.0.3 -p 9953 reload 2>&1 |
sed 's/^/I:ns3 /';
sleep 1
done"
&
echo
$!
>
reload.pid
)
&
for
i
in
0 1 2 3 4
do
$PERL
update.pl
-s
10.53.0.2
-p
5300 zone00000
$i
.example. &
done
echo
"I:waiting for background processes to finish"
wait
echo
"I:killing reload loop"
kill
`
cat
reload.pid
`
echo
"I:exit status:
$status
"
exit
$status
bin/tests/system/stress/update.pl
0 → 100644
View file @
275c6188
#!/usr/bin/perl
#
# Copyright (C) 2000 Internet Software Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
# INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# Dynamic update test suite.
#
# Usage:
#
# perl update_test.pl [-s server] [-p port] zone
#
# The server defaults to 127.0.0.1.
# The port defaults to 53.
#
# The "Special NS rules" tests will only work correctly if the
# has no NS records to begin with, or alternatively has a
# single NS record pointing at the name "ns1" (relative to
# the zone name).
#
# Installation notes:
#
# This program uses the Net::DNS::Resolver module.
# You can install it by saying
#
# perl -MCPAN -e "install Net::DNS"
#
# $Id: update.pl,v 1.1 2000/12/22 17:03:02 gson Exp $
#
use
Getopt::
Std
;
use
Net::
DNS
;
use
Net::DNS::
Update
;
use
Net::DNS::
Resolver
;
$opt_s
=
"
127.0.0.1
";
$opt_p
=
53
;
getopt
('
s:p:
');
$res
=
new
Net::DNS::
Resolver
;
$res
->
nameservers
(
$opt_s
);
$res
->
port
(
$opt_p
);
$res
->
defnames
(
0
);
# Do not append default domain.
@ARGV
==
1
or
die
"
usage: perl update_test.pl [-s server] [-p port] zone
\n
";
$zone
=
shift
@ARGV
;
my
$failures
=
0
;
sub
assert
{
my
(
$cond
,
$explanation
)
=
@_
;
if
(
!
$cond
)
{
print
"
I:Test Failed:
$explanation
***
\n
";
$failures
++
}
}
sub
test
{
my
(
$expected
,
@records
)
=
@_
;
my
$update
=
new
Net::DNS::
Update
("
$zone
");
foreach
$rec
(
@records
)
{
$update
->
push
(
@$rec
);
}
$reply
=
$res
->
send
(
$update
);
# Did it work?
if
(
defined
$reply
)
{
my
$rcode
=
$reply
->
header
->
rcode
;
assert
(
$rcode
eq
$expected
,
"
expected
$expected
, got
$rcode
");
}
else
{
print
"
I:Update failed:
",
$res
->
errorstring
,
"
\n
";
}
}
sub
section
{
my
(
$msg
)
=
@_
;
print
"
I:
$msg
\n
";
}
for
(
$i
=
0
;
$i
<
1000
;
$i
++
)
{
test
("
NOERROR
",
["
update
",
rr_add
("
dynamic-
$i
.
$zone
300 TXT txt-
$i
"
)]);
}
if
(
$failures
)
{
print
"
I:
$failures
tests failed.
\n
";
}
else
{
print
"
I:Update of
$opt_s
zone
$zone
successful.
\n
";
}
exit
$failures
;
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment