#!/usr/share/ucs-test/runner python
## desc: Check PPD files
## tags: [udm]
## roles:
##   - domaincontroller_master
##   - domaincontroller_slave
##   - domaincontroller_backup
##   - memberserver
##   - managedclient
## exposure: safe
## packages:
##   - univention-config
##   - univention-directory-manager-tools
##   - univention-printserver


import os
import univention.testing.utils as utils

if __name__ == '__main__':
	ldapPrinters = []
	printerFiles = []

	for dn, attr in utils.get_ldap_connection().search(filter = '(objectClass=univentionPrinterModels)', attr = ['printerModel']):
		for printerModel in attr.get('printerModel', ()):
			try:
				model = printerModel.split()[0].split('/')[-1].strip('"')
				if model.endswith('.ppd') or model.endswith('.ppd.gz'):
					ldapPrinters.append(model)
			except IndexError:
				pass



	for root, dirs, files in os.walk('/usr/share/ppd/'):
		for file in files:
			if file.endswith('.ppd') or file.endswith('ppd.gz'):
				printerFiles.append(file)

	for printer in ldapPrinters:
		if not printer in printerFiles:
			utils.fail('No PPD file found for LDAP printer "%s"' % printer)
	
	for printerFile in printerFiles:
		if not printerFile in ldapPrinters:
			utils.fail('No LDAP printer found for PPD file "%s"' % printerFile)
