blob: 66f9ad35631e170299444a6c79bcf98d8cf5ceec [file] [log] [blame]
#!/usr/bin/env perl
# Copyright (C) 2011 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# tests run-leaks using "old" leaks report version 2.0
# - The "old" 2.0 format has "leaks Report Version: 2.0" at the top of the report.
use strict;
use warnings;
use File::Spec;
use FindBin;
use lib File::Spec->catdir($FindBin::Bin, "..");
use Test::More;
use LoadAsModule qw(RunLeaks run-leaks);
my @input = split(/\n/, <<EOF);
leaks Report Version: 2.0
Process: Safari [53606]
Path: /Applications/Safari.app/Contents/MacOS/Safari
Load Address: 0x100000000
Identifier: com.apple.Safari
Version: 5.0 (6533.9)
Build Info: WebBrowser-75330900~1
Code Type: X86-64 (Native)
Parent Process: perl5.10.0 [53599]
Date/Time: 2010-05-27 11:42:27.356 -0700
OS Version: Mac OS X 10.6.3 (10D571)
Report Version: 6
Process 53606: 112295 nodes malloced for 22367 KB
Process 53606: 1 leak for 32 total leaked bytes.
Leak: 0x1118c0e60 size=32 zone: DefaultMallocZone_0x105a92000 string 'com.apple.quarantine'
Call stack: [thread 0x7fff70126be0]: | 0x100001e84 | NSApplicationMain | +[NSBundle(NSNibLoading) loadNibNamed:owner:] | +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] | loadNib | -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] | -[NSSet makeObjectsPerformSelector:] | 0x100003494 | 0x1001013ff | 0x10014dbb9 | 0x10014d923 | 0x10014d7d7 | 0x10014ccd9 | 0x100149c8e | 0x100149bd8 | xar_open | xar_file_unserialize | xar_prop_unserialize | xar_prop_unserialize | strdup | malloc | malloc_zone_malloc
EOF
my $expectedOutput =
[
{
'leaksOutput' => 'leaks Report Version: 2.0'
},
{
'leaksOutput' => 'Process: Safari [53606]'
},
{
'leaksOutput' => 'Path: /Applications/Safari.app/Contents/MacOS/Safari'
},
{
'leaksOutput' => 'Load Address: 0x100000000'
},
{
'leaksOutput' => 'Identifier: com.apple.Safari'
},
{
'leaksOutput' => 'Version: 5.0 (6533.9)'
},
{
'leaksOutput' => 'Build Info: WebBrowser-75330900~1'
},
{
'leaksOutput' => 'Code Type: X86-64 (Native)'
},
{
'leaksOutput' => 'Parent Process: perl5.10.0 [53599]'
},
{
'leaksOutput' => ''
},
{
'leaksOutput' => 'Date/Time: 2010-05-27 11:42:27.356 -0700'
},
{
'leaksOutput' => 'OS Version: Mac OS X 10.6.3 (10D571)'
},
{
'leaksOutput' => 'Report Version: 6'
},
{
'leaksOutput' => ''
},
{
'leaksOutput' => 'Process 53606: 112295 nodes malloced for 22367 KB'
},
{
'leaksOutput' => 'Process 53606: 1 leak for 32 total leaked bytes.'
},
{
'leaksOutput' => join('', split(/\n/, <<EOF)),
Leak: 0x1118c0e60 size=32 zone: DefaultMallocZone_0x105a92000 string 'com.apple.quarantine'
Call stack: [thread 0x7fff70126be0]: | 0x100001e84 | NSApplicationMain | +[NSBundle(NSNibLoading) loadNibNamed:owner:] | +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] | loadNib | -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] | -[NSSet makeObjectsPerformSelector:] | 0x100003494 | 0x1001013ff | 0x10014dbb9 | 0x10014d923 | 0x10014d7d7 | 0x10014ccd9 | 0x100149c8e | 0x100149bd8 | xar_open | xar_file_unserialize | xar_prop_unserialize | xar_prop_unserialize | strdup | malloc | malloc_zone_malloc
EOF
'callStack' =>
' Call stack: [thread 0x7fff70126be0]: | 0x100001e84 | NSApplicationMain | +[NSBundle(NSNibLoading) loadNibNamed:owner:] | +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] | loadNib | -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] | -[NSSet makeObjectsPerformSelector:] | 0x100003494 | 0x1001013ff | 0x10014dbb9 | 0x10014d923 | 0x10014d7d7 | 0x10014ccd9 | 0x100149c8e | 0x100149bd8 | xar_open | xar_file_unserialize | xar_prop_unserialize | xar_prop_unserialize | strdup | malloc | malloc_zone_malloc ',
'address' => '0x1118c0e60',
'size' => '32',
'type' => 'com.apple.quarantine',
},
];
my $actualOutput = RunLeaks::parseLeaksOutput(@input);
plan(tests => 1);
is_deeply($actualOutput, $expectedOutput, "leaks Report Version 2.0 (old)");