The module tests the functionality of crontab of the system.
 Crontab depends upon the binary run-parts, which is used to run 
 all scripts under a directory.An entry in the crontab is added  
 by creating an entry in /etc/crontab.
 
 The module uses the run-parts to execute a script(named cron) created under 
 /etc/cron.d/ and the script is made to execute every 60 seconds.The script 
 writes a certain string to a file(/tmp/autotest_cron-<date>).The count of 
 the string after t seconds decides whether the test succeeded 
 or not.
 
 The two files used along with run-parts for selective execution of 
 scripts (jobs.allow and jobs.deny) are also covered under the test.
 jobs.allow specifies the scripts to be run and deny specifies scripts 
 to be ignored.These conditions are also checked.

---
 crontab/control     |   22 ++++++++
 crontab/crontab.py  |  142 +++++++++++++++++++++++++++++++++++++++++++++++++++
 crontab/crontab.pyc |  Bin
 3 files changed, 164 insertions(+)
 create mode 100644 crontab/control
 create mode 100644 crontab/crontab.py
 create mode 100644 crontab/crontab.pyc

diff --git a/crontab/control b/crontab/control
new file mode 100644
index 0000000..6d605a3
--- /dev/null
+++ b/crontab/control
@@ -0,0 +1,22 @@
+AUTHOR = "Rajeev S <[email protected]>"
+NAME = "crontab"
+TEST_CATEGORY = "Functional"
+TEST_CLASS = "Kernel"
+TEST_TYPE = "client"
+TIME = 'SHORT'
+DOC = '''
+Test for testing the crontab.
+
+Uses run-parts to execute the scripts under the standard cron 
directories,/etc/cron.xxxx.
+Automation is done using the /etc/crontab file.
+
+Args:
+    wait_time:Duration of the sleep time.Should be greater than 60(sec)
+'''
+from datetime import datetime
+
+LOGFILE='/tmp/autotest_cron-%s'%(str(datetime.now())[:10])
+
+tests=['normalCron','denyCron','allowCron']
+for i in range(0,3):
+    job.run_test('crontab',test=tests[i],wait_time=65,tag=tests[i],log=LOGFILE)
diff --git a/crontab/crontab.py b/crontab/crontab.py
new file mode 100644
index 0000000..0ef509a
--- /dev/null
+++ b/crontab/crontab.py
@@ -0,0 +1,142 @@
+#!/bin/python
+import os, shutil, glob, logging
+from autotest.client import test, utils
+from autotest.client.shared import error
+from time import sleep
+
+
+class crontab(test.test):
+    '''
+    Autotest module for crontab.
+
+    Creates a new cron job that creates a log entry in log.The count of
+    log entry is compared before and after a period of 80 sec.Difference decide
+    s whether the cron executed
+    successfully.
+
+    @author :Rajeev S <[email protected]>
+    '''
+    version = 1
+    initialCount = 0
+    log=''
+
+    def count_log(self,string):
+       '''returns count of the 'string' in log'''
+        count=0
+        try:
+            f=open(self.log)
+        except IOError:
+            utils.open_write_close(self.log,'')
+            f=open(self.log)
+        for i in f.readlines():
+            if string in i:
+                count+=1
+        f.close()
+        return count
+
+    def initialize(self,test,log):
+        '''Does the init part of the test 
+        1.Finds initial count of entry in log
+        2.Creates a file 'cron' under cron.d
+        3.Backs up /etc/crontab
+        4.Modifies /etc/crontab    '''
+        self.log=log
+
+        self.initialCount=self.count_log('Cron automation')
+        f=open('/etc/cron.d/cron','w')
+        f.write('''#!/bin/bash
+touch %s
+echo 'Cron automation' >> %s
+        '''%(self.log,self.log))
+        f.close()
+        utils.system('chmod +x /etc/cron.d/cron')
+        utils.system('cat /etc/crontab > /tmp/backup')
+        f=open('/etc/crontab','w')
+        f.write('* * * * * root run-parts /etc/cron.d/\n')
+        f.close()
+        if test == 'denyCron':
+            if os.path.exists('/etc/cron.d/jobs.deny'):
+                utils.system('mv /etc/cron.d/jobs.deny /tmp/jobs.deny 
2>/dev/null')
+            f=open('/etc/cron.d/jobs.deny','w')
+            f.write('cron')
+            f.close()
+        elif test =='allowCron' :
+            utils.system('rm /etc/cron.d/jobs.deny')
+            if os.path.exists('/etc/cron.d/jobs.allow'):
+                utils.system('mv /etc/cron.d/jobs.allow /tmp/jobs.allow 
2>/dev/null')
+            f=open('/etc/cron.d/jobs.allow','w')
+            f.write('cron')
+            f.close()
+
+
+    def allowCron(self,wait_time):
+        if self.count_log('Cron automation')>self.initialCount:
+            utils.open_write_close(self.results_path,'''Test Successful.
+            Test time:%s
+            Test mode:2(run-parts with jobs.allow)'''%(wait_time))
+        else:
+            utils.open_write_close(self.results_path,'''Test Failed.
+            There were no new entries in log.
+            Job not executed inspite of jobs.allow entry.
+            Test time:%s
+            Test mode:2 (run-parts with jobs.allow)'''%(wait_time))
+
+
+    def normalCron(self,wait_time):
+        if self.count_log('Cron automation')>self.initialCount:
+            utils.open_write_close(self.results_path,'''Test successful.
+            Test time:%s
+            Test mode:0(normal test for run-parts)'''%(wait_time))
+        else:
+            utils.open_write_close(self.results_path,'''Test Failed.
+            There were no new entries in log.
+            Test time:%s
+            Test mode:0 (normal test for run-parts)'''%(wait_time))
+
+
+    def denyCron(self,wait_time):
+        if self.count_log('Cron automation')>self.initialCount:
+            utils.open_write_close(self.results_path,'''Test Failed.
+            run-parts overrides jobs.deny.
+            Test time:%s
+            Test mode:1(run-parts with jobs.deny)'''%(wait_time))
+        else:
+            utils.open_write_close(self.results_path,'''Test Successful.
+            There were no new entries in log.
+            Test time:%s
+            Test mode:1 (run-parts with jobs.deny)'''%(wait_time))
+
+
+    def make_fun(self,test,wait_time):
+        '''Calls the function with the name <test> '''
+        test=getattr(self,test)
+        test(wait_time)
+
+    def run_once(self,test,wait_time):
+        '''Runs the test,writes test success if cron successfully executes,else
+           writes test failed.
+           Resets /etc/crontab
+           Pass 0:Normal operation of run-parts
+           Pass 1:run-parts with jobs.deny
+           Pass 2:run-parts with jobs.allow
+        '''
+        os.chdir(self.srcdir)
+        self.test=test
+        self.results_path = os.path.join(self.resultsdir,
+                           'raw_output_mode_%s'%test)
+        try:
+            sleep(wait_time)
+            self.make_fun(test,wait_time)
+        except Exception as e:
+            logging.error('\nTest failed:%s'%e)
+
+    def cleanup(self):
+        utils.system('cat /tmp/backup > /etc/crontab')
+        if os.path.exists('/etc/cron.d/jobs.allow'):
+            utils.system('rm /etc/cron.d/jobs.allow /etc/cron.d/cron')
+        else:
+            utils.system('rm /etc/cron.d/cron')
+        if os.path.exists('/tmp/jobs.allow'):
+            utils.system('mv /tmp/jobs.allow /etc/cron.d/jobs.allow 
2>/dev/null')
+        if os.path.exists('/tmp/jobs.deny'):
+            utils.system('mv /tmp/jobs.allow /etc/cron.d/jobs.allow 
2>/dev/null')
diff --git a/crontab/crontab.pyc b/crontab/crontab.pyc
new file mode 100644
index 
0000000000000000000000000000000000000000..771c4f2e80797c1ddfd556db1509eb01da7c4e75
GIT binary patch
literal 6247
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

literal 0
HcmV?d00001


_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel

Reply via email to