Break/Stop loop with MQTT payload/message

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?