#!/usr/bin/python

""" test for testing and profiling state manager """

import cProfile

from ifupdown.networkinterfaces import *
from ifupdown.iface import *
from ifupdown.statemanager import pickling
import os

ifaceobjdict = {}
state_file = '/tmp/ifstatetest'

def save_iface(ifaceobj):
    ifaceobjdict[ifaceobj.get_name()] = ifaceobj
    
def read_default_iface_config():
    """ Reads default network interface config /etc/network/interfaces. """
    nifaces = networkInterfaces()
    nifaces.subscribe('iface_found', save_iface)
    nifaces.load()

def save_state():
    try:
        with open(state_file, 'w') as f:
            for ifaceobj in ifaceobjdict.values():
                pickling.save_obj(f, ifaceobj)
    except:
        raise

def load_state():
    global ifaceobjdict

    if not os.path.exists(state_file):
        return

    del ifaceobjdict
    ifaceobjdict = {}

    # Read all ifaces from file
    for ifaceobj in pickling.load(state_file):
        save_iface(ifaceobj)


print 'Reading iface config files ..'
cProfile.run('read_default_iface_config()')
print 'number of objects: %d' %len(ifaceobjdict)

print 'saving iface state ..'
cProfile.run('save_state()')

print 'loading iface state ..'
cProfile.run('load_state()')
print 'number of objects: %d' %len(ifaceobjdict)

