def teardown(): sess.close() (ms, intrnl) = get_reqs() #TODO: move this general approach to test_dns??? # generalize the entire approach and take a count on the way in and out qry = sess.query(ARecord).filter( ARecord.name.like(AREC_PREFIX + '%')) qry = qry.filter_by(dns_environment=intrnl) if qry.count() == 0: log.info('successful cascaded deletion of ARecords') else: log.error('ARecords left intact when they should be delete cascaded') for rec in qry.filter_by(dns_domain=ms).all(): sess.delete(rec) commit(sess) log.debug('deleted ARecord %s' % rec.fqdn) dns_count_after = sess.query(DnsRecord).count() if dns_count_after != dns_count_b4: log.warning('%s record(s) left after teardown in %s, should be %s' % ( dns_count_after, func_name(), dns_count_b4)) del_machines(sess, MCHN_PREFIX) mchn_count_after = sess.query(Machine).count() if mchn_count_b4 != mchn_count_after: log.warning('%s machines left after %s, should be %s'%( mchn_count_after, func_name(), mchn_count_b4))
def test_create_machines_for_test_interface(): np = Building.get_unique(sess, 'np') assert isinstance(np, Building), 'no building in %s' % func_name() hp = Vendor.get_unique(sess, 'hp') assert isinstance(hp, Vendor), 'no vendor in %s' % func_name() am = Model.get_unique(sess, name='bl45p', vendor=hp) assert isinstance(am, Model), 'no model in %s' % func_name() cpu = sess.query(Cpu).first() assert isinstance(cpu, Cpu), 'no cpu in %s' % func_name() for i in xrange(NUM_MACHINES): machine = Machine(label='%s%s' % (MACHINE_NAME_PREFIX, i), location=np, model=am, cpu=cpu, cpu_quantity=2, memory=32768) create(sess, machine) machines = sess.query(Machine).filter( Machine.label.like(MACHINE_NAME_PREFIX + '%')).all() eq_(len(machines), NUM_MACHINES)
def teardown(): sess.close() (ms, intrnl) = get_reqs() #TODO: move this general approach to test_dns??? # generalize the entire approach and take a count on the way in and out qry = sess.query(ARecord).filter(ARecord.name.like(AREC_PREFIX + '%')) qry = qry.filter_by(dns_environment=intrnl) if qry.count() == 0: log.info('successful cascaded deletion of ARecords') else: log.error('ARecords left intact when they should be delete cascaded') for rec in qry.filter_by(dns_domain=ms).all(): sess.delete(rec) commit(sess) log.debug('deleted ARecord %s' % rec.fqdn) dns_count_after = sess.query(DnsRecord).count() if dns_count_after != dns_count_b4: log.warning('%s record(s) left after teardown in %s, should be %s' % (dns_count_after, func_name(), dns_count_b4)) del_machines(sess, MCHN_PREFIX) mchn_count_after = sess.query(Machine).count() if mchn_count_b4 != mchn_count_after: log.warning('%s machines left after %s, should be %s' % (mchn_count_after, func_name(), mchn_count_b4))
def test_cluster_bound_svc(): """ test the creation of a cluster bound service """ si = add_service_instance(sess, SVC_NAME, INST_NAME) assert si, "no service instance in %s" % func_name() ec = Cluster.get_unique(sess, CLUSTER_NAME) cs = ClusterServiceBinding(cluster=ec, service_instance=si) create(sess, cs) assert cs, "no cluster bound service created by" % func_name() print cs
def test_cluster_bound_svc(): """ test the creation of a cluster bound service """ si = add_service_instance(sess, SVC_NAME, INST_NAME) assert si, 'no service instance in %s' % func_name() ec = Cluster.get_unique(sess, CLUSTER_NAME) cs = ClusterServiceBinding(cluster=ec, service_instance=si) create(sess, cs) assert cs, 'no cluster bound service created by' % func_name() print cs
def add_service_instance(sess, service_name, name): si = sess.query(ServiceInstance).filter_by(name=name).first() if not si: print "Creating %s instance %s " % (service_name, name) svc = sess.query(Service).filter_by(name=service_name).one() assert svc, "No %s service in %s" % (service_name, func_name()) si = ServiceInstance(name=name, service=svc) create(sess, si) assert si, "no service instance created by %s" % func_name() return si
def test_add_aligned_service(): svc = sess.query(Service).filter_by(name=SVC_NAME).first() assert svc, "No cluster management service in %s" % func_name() cas = ClusterAlignedService(cluster_type="esx", service=svc) create(sess, cas) assert cas, "no cluster aligned service created by %s" % func_name() print cas ec = sess.query(EsxCluster).first() print "%s has required services %s" % (ec.name, ec.required_services) assert ec.required_services
def test_add_aligned_service(): svc = sess.query(Service).filter_by(name=SVC_NAME).first() assert svc, 'No cluster management service in %s' % func_name() cas = ClusterAlignedService(cluster_type='esx', service=svc) create(sess, cas) assert cas, 'no cluster aligned service created by %s' % func_name() print cas ec = sess.query(EsxCluster).first() print '%s has required services %s' % (ec.name, ec.required_services) assert ec.required_services
def add_service_instance(sess, service_name, name): si = sess.query(ServiceInstance).filter_by(name=name).first() if not si: print 'Creating %s instance %s ' % (service_name, name) svc = sess.query(Service).filter_by(name=service_name).one() assert svc, 'No %s service in %s' % (service_name, func_name()) si = ServiceInstance(name=name, service=svc) create(sess, si) assert si, 'no service instance created by %s' % func_name() return si
def test_cascaded_delete2(): """ deleting services deletes cluster aligned services """ svc = sess.query(Service).filter_by(name=SVC_2).first() assert svc, "No throw away service in %s" % func_name() # add cas, delete the service, make sure the CAS disappears cas = ClusterAlignedService(cluster_type="esx", service=svc) create(sess, cas) assert cas, "No cluster aligned service in %s" % func_name() # FIX ME: put in tear_down() sess.delete(svc) commit(sess) sess.refresh(cas) sess.refresh(svc)
def test_cascaded_delete2(): """ deleting services deletes cluster aligned services """ svc = sess.query(Service).filter_by(name=SVC_2).first() assert svc, "No throw away service in %s" % func_name() #add cas, delete the service, make sure the CAS disappears cas = ClusterAlignedService(cluster_type='esx', service=svc) create(sess, cas) assert cas, "No cluster aligned service in %s" % func_name() #FIX ME: put in tear_down() sess.delete(svc) commit(sess) sess.refresh(cas) sess.refresh(svc)
def setup(): dmn = DnsDomain(name=DNS_DOMAIN_NAME) create(sess, dmn) assert dmn, 'no dns domain in %s' % func_name() pi = Building.get_unique(sess, name='pi', compel=True) n = IPv4Network(TEST_NET) net = Network(name=TEST_NET_NAME, network=n, location=pi) create(sess, net) assert net, 'no network created by %s' % func_name() ip = IPv4Address(TEST_IP) arec = ARecord(name=AREC_NAME, dns_domain=dmn, ip=ip, network=net) create(sess, arec) assert arec, 'no ARecord created by %s' % func_name()
def test_create_iface(): machine = sess.query(Machine).first() iface = Interface(hardware_entity=machine, name='eth0', mac=random_mac(), bootable=True, interface_type='public') create(sess, iface) assert isinstance(iface, Interface), 'no iface created @ %s' % func_name()
def test_create_cluster(): # TODO: make this a reusable function in test_cluster and import np = sess.query(Building).filter_by(name="np").one() dmn = sess.query(Domain).first() assert dmn, "No domain found in %s" % func_name() per = ( sess.query(Personality) .select_from(join(Archetype, Personality)) .filter(and_(Archetype.name == "windows", Personality.name == "generic")) .one() ) ec = EsxCluster(name=CLUSTER_NAME, location_constraint=np, personality=per, domain=dmn) create(sess, ec) assert ec, "No EsxCluster created by %s" % func_name() print ec
def test_no_duplicate_primary_name_entries(): """ Ensures that a primary name can not be duplicated """ a_rcrd = sess.query(ARecord).filter_by(ip=IP_ADDRS[0]).first() assert a_rcrd, 'No a_record in %s' % func_name() mchn = add_machine(sess, MCHN_PREFIX + str(unique_number.next())) assert mchn, 'no machine created in %s' % func_name() try: pna = PrimaryNameAssociation(hardware_entity=mchn, a_record=a_rcrd) #a_record_id=a_rcrd.dns_record_id) sess.add(pna) sess.commit() print 'should fail but %r ' % pna except Exception, e: sess.rollback() raise e
def test_create_cluster(): #TODO: make this a reusable function in test_cluster and import np = sess.query(Building).filter_by(name='np').one() dmn = sess.query(Domain).first() assert dmn, 'No domain found in %s' % func_name() per = sess.query(Personality).select_from(join( Archetype, Personality)).filter( and_(Archetype.name == 'windows', Personality.name == 'generic')).one() ec = EsxCluster(name=CLUSTER_NAME, location_constraint=np, personality=per, domain=dmn) create(sess, ec) assert ec, "No EsxCluster created by %s" % func_name() print ec
def add_arecord(ip): """ adding a valid ARecord """ (ms, intrnl) = get_reqs() a_rcrd = ARecord(name=AREC_PREFIX + str(unique_number.next()), dns_domain=ms, dns_environment=intrnl, ip=ip, comments='comment here', session=sess) create(sess, a_rcrd) assert a_rcrd, 'no a_record created by %s' % func_name() sess.refresh(a_rcrd) return a_rcrd
def test_fail_upd_mgmt_iface_to_null_mac(): machine = sess.query(Machine).first() iface = Interface(hardware_entity=machine, name='ipmi', mac=random_mac(), bootable=True, interface_type='management') create(sess, iface) assert isinstance(iface, Interface), 'no iface created @ %s' % func_name() iface.mac = None commit(sess) assert iface.mac is not None, 'set a management iface to null mac_addr'
def test_fail_upd_bootable_iface_to_null_mac(): machine = sess.query(Machine).first() iface = Interface(hardware_entity=machine, name='eth1', mac=random_mac(), bootable=True, interface_type='public') create(sess, iface) assert isinstance(iface, Interface), 'no iface created @ %s' % func_name() iface.mac = None commit(sess) assert iface.mac is not None, 'able to set a bootable interface to null'
def test_create_machines_for_test_host(): np = Building.get_unique(sess, 'np') assert isinstance(np,Building), 'no building in %s' % func_name() hp = Vendor.get_unique(sess, 'hp') assert isinstance(hp, Vendor), 'no vendor in %s' % func_name() am = Model.get_unique(sess, name='bl45p', vendor=hp) assert isinstance(am, Model), 'no model in %s' % func_name() cpu = sess.query(Cpu).first() assert isinstance(cpu, Cpu), 'no cpu in %s' % func_name() for i in xrange(NUM_MACHINES): machine = Machine(label='%s%s'% (MACHINE_NAME_PREFIX, i), location=np, model=am, cpu=cpu, cpu_quantity=2, memory=32768) create(sess, machine) machines = sess.query(Machine).filter( Machine.label.like(MACHINE_NAME_PREFIX+'%')).all() eq_(len(machines), NUM_MACHINES)
def test_cascaded_delete_1(): """ test that deleting service bindings don't delete services """ print 'Creating throw away service' svc = add_service(sess, SVC_2) assert svc, 'service not created by %s' % func_name() print 'added throw away service %s' % (svc) #make it a cluster aligned svc cas = ClusterAlignedService(cluster_type='esx', service=svc) create(sess, cas) assert cas, "No cluster aligned service in %s" % func_name() """ delete the cas, see if the service is still there. sess.refresh(obj) will throw 'InvalidRequestError: Instance xxx is not persistent within this Session' if it's been deleted """ sess.delete(cas) commit(sess) sess.refresh(svc) assert svc, "Service deleted when deleting the cluster aligned service" print "still have %s after deleting cluster aligned svc" % svc
def test_cascaded_delete_1(): """ test that deleting service bindings don't delete services """ print "Creating throw away service" svc = add_service(sess, SVC_2) assert svc, "service not created by %s" % func_name() print "added throw away service %s" % (svc) # make it a cluster aligned svc cas = ClusterAlignedService(cluster_type="esx", service=svc) create(sess, cas) assert cas, "No cluster aligned service in %s" % func_name() """ delete the cas, see if the service is still there. sess.refresh(obj) will throw 'InvalidRequestError: Instance xxx is not persistent within this Session' if it's been deleted """ sess.delete(cas) commit(sess) sess.refresh(svc) assert svc, "Service deleted when deleting the cluster aligned service" print "still have %s after deleting cluster aligned svc" % svc
def test_primary_name_cascaded_deletion(): """ Ensure desired cascade behavior happens """ #sess.expunge_all() #db.engine.echo = True logging.getLogger('sqlalchemy.orm').setLevel(logging.DEBUG) pna_count_b4 = sess.query(PrimaryNameAssociation).count() log.info('count before pna delete is %s' % pna_count_b4) mchn = sess.query(Machine).filter(Machine.label.like(MCHN_PREFIX + '%')).first() assert mchn, 'no machine found in %s' % func_name() #logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) try: sess.delete(mchn) sess.commit() except Exception, e: sess.close() raise e
def test_primary_name_cascaded_deletion(): """ Ensure desired cascade behavior happens """ #sess.expunge_all() #db.engine.echo = True logging.getLogger('sqlalchemy.orm').setLevel(logging.DEBUG) pna_count_b4 = sess.query(PrimaryNameAssociation).count() log.info('count before pna delete is %s' % pna_count_b4) mchn = sess.query(Machine).filter( Machine.label.like(MCHN_PREFIX + '%')).first() assert mchn, 'no machine found in %s' % func_name() #logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) try: sess.delete(mchn) sess.commit() except Exception, e: sess.close() raise e
def setup(): dmn = DnsDomain.get_unique(sess, DNS_DOMAIN_NAME, compel=True) assert isinstance(dmn, DnsDomain), 'No ms.com domain in %s' % func_name() intrnl = DnsEnvironment.get_unique(sess, DNS_ENV, compel=True) assert isinstance(dmn, DnsDomain), 'No internal env in %s' % func_name()
def test_func_name(): eq_(utils.func_name(), 'test_utils.test_func_name()') print '\ntests.aqdb.utils.func_name returns %s' % utils.func_name()
#FIXME: import server.depends from utils.load_server_classpath() import ms.version ms.version.addpkg('ipaddr', '2.1.9') from ipaddr import IPv4Address as IPAddr from nose.tools import eq_ NUM_MACHINES = 2 DNAME = 'ms.com' DNSENV = 'internal' SHORT_NAME_PREFIX = 'aqdb-test-host-' MACHINE_NAME_PREFIX = 'test_machine_' sess = DbFactory().Session() assert sess, 'No session in %s' % func_name() #TODO: factor out assert_type(obj, cls, func_name) the isinstance calls STATUS = Status.get_unique(sess, 'ready') assert isinstance(STATUS, Status), 'No ready status @ %s' % func_name() DOMAIN = Domain.get_unique(sess, 'ny-prod') assert isinstance(DOMAIN, Domain), 'no ny-prod domain @ %s' % func_name() ARCH = Archetype.get_unique(sess, 'aquilon') assert isinstance(ARCH, Archetype), 'No archetype @ %s' % func_name() OS = OperatingSystem.get_unique(sess, name='linux', version='5.0.1-x86_64', archetype=ARCH)
def test_add_service(): svc = sess.query(Service).filter_by(name=SVC_NAME).first() if not svc: svc = add_service(sess, SVC_NAME) assert svc, 'service not created by %s' % func_name() print svc
def test_add_service(): svc = sess.query(Service).filter_by(name=SVC_NAME).first() if not svc: svc = add_service(sess, SVC_NAME) assert svc, "service not created by %s" % func_name() print svc
#FIXME: import server.depends from utils.load_server_classpath() import ms.version ms.version.addpkg('ipaddr', '2.1.9') from ipaddr import IPv4Address as IPAddr from nose.tools import eq_ NUM_MACHINES = 2 DNAME = 'ms.com' DNSENV = 'internal' SHORT_NAME_PREFIX = 'aqdb-test-host-' MACHINE_NAME_PREFIX = 'test_machine_' sess = DbFactory().Session() assert sess, 'No session in %s' % func_name() #TODO: factor out assert_type(obj, cls, func_name) the isinstance calls STATUS = Status.get_unique(sess, 'ready') assert isinstance(STATUS, Status), 'No ready status @ %s' % func_name() DOMAIN = Domain.get_unique(sess, 'ny-prod') assert isinstance(DOMAIN, Domain), 'no ny-prod domain @ %s' % func_name() ARCH = Archetype.get_unique(sess, 'aquilon') assert isinstance(ARCH, Archetype), 'No archetype @ %s' % func_name() OS = OperatingSystem.get_unique(sess, name='linux', version='5.0.1-x86_64', archetype=ARCH) assert isinstance(OS, OperatingSystem), 'No os @ %s' % func_name()