while(test == 1) {
Serial.println("up");
if (test == 0) {
goto outer;
}
}
outer:;
Once the while loop starts, test does NOT ever get a new value, so the %&#%#^% goto statement will never be called.
Why do you persist in thinking that test will get a new value when the while loop is running?