github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/php/interpreter_cataloger_test.go (about)

     1  package php
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/anchore/syft/syft/pkg/cataloger/internal/pkgtest"
     7  )
     8  
     9  func Test_InterpreterCataloger(t *testing.T) {
    10  	tests := []struct {
    11  		name         string
    12  		fixture      string
    13  		expectedPkgs []string
    14  		expectedRels []string
    15  	}{
    16  		{
    17  			name:    "native installation with extensions",
    18  			fixture: "image-extensions",
    19  			expectedPkgs: []string{
    20  				// interpreters
    21  				"php-cli @ 8.3.27 (/usr/local/bin/php)",
    22  				"php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    23  
    24  				// extensions
    25  				"bcmath @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/bcmath.so)",
    26  				"exif @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/exif.so)",
    27  				"ftp @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/ftp.so)",
    28  				"gd @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/gd.so)",
    29  				"gmp @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/gmp.so)",
    30  				"intl @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl.so)",
    31  				"ldap @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/ldap.so)",
    32  				"opcache @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/opcache.so)",
    33  				"pcntl @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pcntl.so)",
    34  				"pdo_mysql @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pdo_mysql.so)",
    35  				"pdo_pgsql @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pdo_pgsql.so)",
    36  				"sodium @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/sodium.so)",
    37  				"sysvsem @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/sysvsem.so)",
    38  				"zip @ 1.22.3 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/zip.so)",
    39  			},
    40  			expectedRels: []string{
    41  				"bcmath @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/bcmath.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    42  				"bcmath @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/bcmath.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    43  				"exif @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/exif.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    44  				"exif @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/exif.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    45  				"ftp @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/ftp.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    46  				"ftp @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/ftp.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    47  				"gd @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/gd.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    48  				"gd @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/gd.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    49  				"gmp @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/gmp.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    50  				"gmp @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/gmp.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    51  				"intl @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    52  				"intl @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/intl.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    53  				"ldap @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/ldap.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    54  				"ldap @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/ldap.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    55  				"opcache @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/opcache.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    56  				"opcache @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/opcache.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    57  				"pcntl @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pcntl.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    58  				"pcntl @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pcntl.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    59  				"pdo_mysql @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pdo_mysql.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    60  				"pdo_mysql @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pdo_mysql.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    61  				"pdo_pgsql @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pdo_pgsql.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    62  				"pdo_pgsql @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/pdo_pgsql.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    63  				"sodium @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/sodium.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    64  				"sodium @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/sodium.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    65  				"sysvsem @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/sysvsem.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    66  				"sysvsem @ 8.3.27 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/sysvsem.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    67  				"zip @ 1.22.3 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/zip.so) [dependency-of] php-cli @ 8.3.27 (/usr/local/bin/php)",
    68  				"zip @ 1.22.3 (/usr/local/lib/php/extensions/no-debug-non-zts-20230831/zip.so) [dependency-of] php-fpm @ 8.3.27 (/usr/local/sbin/php-fpm)",
    69  			},
    70  		},
    71  		{
    72  			name:    "apache installation with libphp and extensions",
    73  			fixture: "image-apache",
    74  			expectedPkgs: []string{
    75  				// interpreters
    76  				"libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
    77  
    78  				// extensions
    79  				"calendar @ 8.2.29 (/usr/lib/php/20220829/calendar.so)",
    80  				"ctype @ 8.2.29 (/usr/lib/php/20220829/ctype.so)",
    81  				"exif @ 8.2.29 (/usr/lib/php/20220829/exif.so)",
    82  				"ffi @ 8.2.29 (/usr/lib/php/20220829/ffi.so)",
    83  				"fileinfo @ 8.2.29 (/usr/lib/php/20220829/fileinfo.so)",
    84  				"ftp @ 8.2.29 (/usr/lib/php/20220829/ftp.so)",
    85  				"gettext @ 8.2.29 (/usr/lib/php/20220829/gettext.so)",
    86  				"iconv @ 8.2.29 (/usr/lib/php/20220829/iconv.so)",
    87  				"mysqli @ 8.2.29 (/usr/lib/php/20220829/mysqli.so)",
    88  				"opcache @ 8.2.29 (/usr/lib/php/20220829/opcache.so)",
    89  				"pdo @ 8.2.29 (/usr/lib/php/20220829/pdo.so)",
    90  				"pdo_mysql @ 8.2.29 (/usr/lib/php/20220829/pdo_mysql.so)",
    91  				"phar @ 8.2.29 (/usr/lib/php/20220829/phar.so)",
    92  				"posix @ 8.2.29 (/usr/lib/php/20220829/posix.so)",
    93  				"readline @ 8.2.29 (/usr/lib/php/20220829/readline.so)",
    94  				"shmop @ 8.2.29 (/usr/lib/php/20220829/shmop.so)",
    95  				"simplexml @ 8.2.29 (/usr/lib/php/20220829/simplexml.so)",
    96  				"sockets @ 8.2.29 (/usr/lib/php/20220829/sockets.so)",
    97  				"sysvmsg @ 8.2.29 (/usr/lib/php/20220829/sysvmsg.so)",
    98  				"sysvsem @ 8.2.29 (/usr/lib/php/20220829/sysvsem.so)",
    99  				"sysvshm @ 8.2.29 (/usr/lib/php/20220829/sysvshm.so)",
   100  				"tokenizer @ 8.2.29 (/usr/lib/php/20220829/tokenizer.so)",
   101  				"xml @ 8.2.29 (/usr/lib/php/20220829/xml.so)",
   102  				"xmlreader @ 8.2.29 (/usr/lib/php/20220829/xmlreader.so)",
   103  				"xmlwriter @ 8.2.29 (/usr/lib/php/20220829/xmlwriter.so)",
   104  				"xsl @ 8.2.29 (/usr/lib/php/20220829/xsl.so)",
   105  			},
   106  			expectedRels: []string{
   107  				"calendar @ 8.2.29 (/usr/lib/php/20220829/calendar.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   108  				"ctype @ 8.2.29 (/usr/lib/php/20220829/ctype.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   109  				"exif @ 8.2.29 (/usr/lib/php/20220829/exif.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   110  				"ffi @ 8.2.29 (/usr/lib/php/20220829/ffi.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   111  				"fileinfo @ 8.2.29 (/usr/lib/php/20220829/fileinfo.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   112  				"ftp @ 8.2.29 (/usr/lib/php/20220829/ftp.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   113  				"gettext @ 8.2.29 (/usr/lib/php/20220829/gettext.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   114  				"iconv @ 8.2.29 (/usr/lib/php/20220829/iconv.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   115  				"mysqli @ 8.2.29 (/usr/lib/php/20220829/mysqli.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   116  				"opcache @ 8.2.29 (/usr/lib/php/20220829/opcache.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   117  				"pdo @ 8.2.29 (/usr/lib/php/20220829/pdo.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   118  				"pdo_mysql @ 8.2.29 (/usr/lib/php/20220829/pdo_mysql.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   119  				"phar @ 8.2.29 (/usr/lib/php/20220829/phar.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   120  				"posix @ 8.2.29 (/usr/lib/php/20220829/posix.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   121  				"readline @ 8.2.29 (/usr/lib/php/20220829/readline.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   122  				"shmop @ 8.2.29 (/usr/lib/php/20220829/shmop.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   123  				"simplexml @ 8.2.29 (/usr/lib/php/20220829/simplexml.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   124  				"sockets @ 8.2.29 (/usr/lib/php/20220829/sockets.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   125  				"sysvmsg @ 8.2.29 (/usr/lib/php/20220829/sysvmsg.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   126  				"sysvsem @ 8.2.29 (/usr/lib/php/20220829/sysvsem.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   127  				"sysvshm @ 8.2.29 (/usr/lib/php/20220829/sysvshm.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   128  				"tokenizer @ 8.2.29 (/usr/lib/php/20220829/tokenizer.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   129  				"xml @ 8.2.29 (/usr/lib/php/20220829/xml.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   130  				"xmlreader @ 8.2.29 (/usr/lib/php/20220829/xmlreader.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   131  				"xmlwriter @ 8.2.29 (/usr/lib/php/20220829/xmlwriter.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   132  				"xsl @ 8.2.29 (/usr/lib/php/20220829/xsl.so) [dependency-of] libphp @ 8.2.29 (/usr/lib/apache2/modules/libphp8.2.so)",
   133  			},
   134  		},
   135  	}
   136  
   137  	for _, tt := range tests {
   138  		t.Run(tt.name, func(t *testing.T) {
   139  			c := NewInterpreterCataloger()
   140  			pkgtest.NewCatalogTester().
   141  				WithImageResolver(t, tt.fixture).
   142  				IgnoreLocationLayer(). // this fixture can be rebuilt, thus the layer ID will change
   143  				//Expects(tt.expected, nil).
   144  				ExpectsPackageStrings(tt.expectedPkgs).
   145  				ExpectsRelationshipStrings(tt.expectedRels).
   146  				TestCataloger(t, c)
   147  		})
   148  	}
   149  }