00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 ini={}
00012 cm_kernel=None
00013
00014
00015 import json
00016 import os
00017
00018
00019 def init(i):
00020 return {'cm_return':0}
00021
00022
00023 def all(i):
00024 """
00025 Test all
00026
00027 Input: {
00028 }
00029
00030 Output: {
00031 cm_return - return code >0 if error
00032 }
00033 """
00034
00035 errors=[]
00036
00037 cm_kernel.print_for_con('Testing all cM functionality (alpha)')
00038
00039
00040
00041 func='cM UID generation'
00042 cm_kernel.print_for_con('')
00043 cm_kernel.print_for_con('Checking "'+func+'" ...')
00044
00045 r=cm_kernel.gen_uid({})
00046 if r['cm_return']>0:
00047 errors.append({'func':func,'cm_error':r['cm_error']})
00048 cm_kernel.print_for_con(' Error ('+r['cm_error']+')')
00049
00050 uid=r['cm_uid']
00051 if len(uid)!=16:
00052 err='UID len is not 16'
00053 errors.append({'func':func,'cm_error':err})
00054 cm_kernel.print_for_con(' Error ('+err+')')
00055
00056 if not cm_kernel.is_uid(uid):
00057 err='Generated UID is not cM UID'
00058 errors.append({'func':func,'cm_error':err})
00059 cm_kernel.print_for_con(' Error ('+err+')')
00060
00061 cm_kernel.print_for_con(' Ok')
00062
00063
00064 func='tmp data creation'
00065 cm_kernel.print_for_con('')
00066 cm_kernel.print_for_con('Checking "'+func+'" ...')
00067
00068 r=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-tmp'],
00069 'cm_action':'add',
00070 'cm_array':{}})
00071 if r['cm_return']>0:
00072 errors.append({'func':func,'cm_error':r['cm_error']})
00073 cm_kernel.print_for_con(' Error ('+r['cm_error']+')')
00074
00075 uid=r['cm_uid']
00076
00077 cm_kernel.print_for_con(' Ok (UID='+uid+')')
00078
00079
00080 func='tmp data deletion'
00081 cm_kernel.print_for_con('')
00082 cm_kernel.print_for_con('Checking "'+func+'" ...')
00083
00084 r=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-tmp'],
00085 'cm_action':'delete',
00086 'cm_data_uoa':uid})
00087 if r['cm_return']>0:
00088 errors.append({'func':func,'cm_error':r['cm_error']})
00089 cm_kernel.print_for_con(' Error ('+r['cm_error']+')')
00090
00091 cm_kernel.print_for_con(' Ok')
00092
00093 cm_kernel.print_for_con('')
00094 cm_kernel.print_for_con('We should add much more tests - any help is appreciated!')
00095
00096
00097 return {'cm_return':0, 'cm_errors':errors}
00098
00099
00100 def any(i):
00101 """
00102 Test some funcionality before moving to a proper test
00103
00104 Input: {
00105 }
00106
00107 Output: {
00108 cm_return - return code >0 if error
00109 }
00110 """
00111
00112
00113
00114
00115
00116
00117
00118
00119 return {'cm_return':0}
00120
00121
00122 def functionality(i):
00123 """
00124 Test some funcionality before moving to a proper test
00125
00126 Input: {
00127 name
00128 }
00129
00130 Output: {
00131 cm_return - return code >0 if error
00132 }
00133 """
00134
00135 if 'name' not in i: return {'cm_return':1, 'cm_error':'"name" is not set for "test functionality"'}
00136
00137 name=i['name']
00138
00139 if name=='array_merging_in_cmd':
00140 cm_kernel.print_for_con('')
00141 cm_kernel.print_for_con("Input "+json.dumps(i, indent=2))
00142
00143 elif name=='convert_index_to_data':
00144 r=cm_kernel.load_json_file({'cm_filename':i['cm_filename']})
00145 if r['cm_return']>0: return r
00146
00147 r=cm_kernel.restore_flattened_array({'cm_array':r['cm_array']})
00148 if r['cm_return']>0: return r
00149
00150 r=cm_kernel.save_array_to_file_as_json({'cm_filename':i['cm_filename_out'], 'cm_array':r['cm_array']})
00151 if r['cm_return']>0: return r
00152
00153 return {'cm_return':0}
00154
00155
00156 def find_data_without_access_control(i):
00157 """
00158 Test some funcionality before moving to a proper test
00159
00160 Input: {
00161 (prune_repo_uoa) - prune search by a given repository
00162 (prune_module_uoa) - prune search by a given module
00163 (prune_data_uoa) - prune search by a given data
00164 }
00165
00166 Output: {
00167 cm_return - return code >0 if error
00168 }
00169 """
00170
00171 problems=[]
00172
00173 count=0
00174
00175
00176 if i.get('prune_repo_uoa','')!='':
00177
00178 r1=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-repo'],
00179 'cm_action':'load',
00180 'cm_data_uoa':i['prune_repo_uoa']})
00181 if r1['cm_return']>0: return r1
00182 rlist=[{'cm_uoa':r1['cm_uoa'], 'cm_uid':r1['cm_uid']}]
00183 else:
00184 r1=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-repo'],
00185 'cm_action':'list'})
00186 if r1['cm_return']>0: return r1
00187 rlist=r1['cm_mixed']
00188
00189 for repo1 in rlist:
00190 repo_uoa=repo1['cm_uoa']
00191 repo_uid=repo1['cm_uid']
00192
00193
00194 r2=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-repo'],
00195 'cm_action':'load',
00196 'cm_data_uoa':repo_uoa})
00197 if r2['cm_return']>0: return r2
00198 repo_cfg=r2['cm_data_obj']['cfg']
00199 if repo_cfg.get('path_type','')!='remote_url':
00200
00201 if i.get('prune_module_uoa','')!='':
00202
00203 r2=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-module'],
00204 'cm_action':'load',
00205 'cm_data_uoa':i['prune_module_uoa']})
00206 if r2['cm_return']>0: return r2
00207 mlist=[{'cm_uoa':r2['cm_uoa'], 'cm_uid':r2['cm_uid']}]
00208 else:
00209 r2=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-core'],
00210 'cm_action':'list',
00211 'cm_repo_uoa':repo_uoa,
00212 'cm_only_available_modules':'yes'})
00213 if r2['cm_return']>0: return r2
00214 mlist=r2['cm_mixed']
00215
00216 for module1 in mlist:
00217
00218 module_uoa=module1['cm_uoa']
00219 module_uid=module1['cm_uid']
00220
00221
00222 if i.get('prune_data_uoa','')!='':
00223
00224 r3=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-core'],
00225 'cm_module_uoa':module_uoa,
00226 'cm_action':'load',
00227 'cm_data_uoa':i['prune_data_uoa'],
00228 'cm_repo_uoa':repo_uoa})
00229 if r3['cm_return']==0:
00230 dlist=[{'cm_uoa':r3['cm_uoa'], 'cm_uid':r3['cm_uid']}]
00231 else:
00232 dlist=[]
00233 else:
00234 r3=cm_kernel.access({'cm_run_module_uoa':module_uoa,
00235 'cm_action':'list',
00236 'cm_repo_uoa':repo_uoa})
00237 if r3['cm_return']>0: return r3
00238 dlist=r3['cm_mixed']
00239
00240 for data1 in dlist:
00241
00242 data_uoa=data1['cm_uoa']
00243 data_uid=data1['cm_uid']
00244
00245 count+=1
00246 cm_kernel.print_for_con('('+str(count)+') Checking CID='+repo_uoa+':'+module_uoa+':'+data_uoa+' ...')
00247
00248
00249 r=cm_kernel.access({'cm_run_module_uoa':module_uoa,
00250 'cm_action':'load',
00251 'cm_data_uoa':data_uoa,
00252 'cm_repo_uoa':repo_uoa})
00253 if r['cm_return']>0: return r
00254 d=r['cm_data_obj']['cfg']
00255
00256 p=r['cm_path']
00257
00258 p0=os.path.join(p, cm_kernel.ini['dcfg']['dcm'])
00259 p1=os.path.join(p0, cm_kernel.ini['dcfg']['fconfig'])
00260
00261 changed=False
00262
00263 if len(d.get('cm_access_control',{}))==0:
00264 d['cm_access_control']={'comments_groups':'registered', 'read_groups':'registered', 'write_groups':'owner'}
00265 else:
00266 dx=d['cm_access_control']
00267 if 'allow_comments_and_ranking' in dx:
00268 dy=dx.get('allow_comments_and_ranking','')
00269 del(dx['allow_comments_and_ranking'])
00270
00271 if dy=='yes':
00272 dx['comments_groups']='registered'
00273 else:
00274 dx['comments_groups']='admin'
00275 else:
00276 dx['comments_groups']='admin'
00277
00278 d['cm_access_control']=dx
00279
00280
00281 r4=cm_kernel.save_array_to_file_as_json({'cm_filename':p1, 'cm_array':d})
00282 if r4['cm_return']>0: return r4
00283
00284 return {'cm_return':0}