In reply to wajahatriaz:
Your problem is when you construct the animal component, you pass a null parent handle. The build_phase executes top-down. After executing the build_phase of test, it executes the build_phases of all its children. But since you did not pass this(which is a handle to the test instance), it never executes the build_phase of animal. With a null parent, animal becomes an orphan component which is why get_fullname only shows "animal_h1".
Change this line to
animal_h1 = animal::type_id::create("animal_h1", this);
BTW, the uvm_config_db::get is a function call, not a blocking task.